rebase all patches

xserver-1.10-vbe-malloc.patch: drop, d8caa782009abf4d
"git rm" all unused patches
This commit is contained in:
Peter Hutterer 2011-04-19 09:16:35 +10:00
parent de81d9548c
commit 4c175ee402
21 changed files with 70 additions and 1518 deletions

View File

@ -30,7 +30,7 @@
Summary: X.Org X11 X server
Name: xorg-x11-server
Version: 1.10.99.1
Release: 1%{?gitdate:.%{gitdate}}%{dist}
Release: 2%{?gitdate:.%{gitdate}}%{dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X
@ -64,7 +64,7 @@ Source30: xserver-sdk-abi-requires
# Trivial things to never merge upstream ever:
# This really could be done prettier.
Patch5002: xserver-1.4.99-ssh-isnt-local.patch
Patch5002: xserver-1.4.99-ssh-isnt-local.patch
# don't build the (broken) acpi code
Patch6011: xserver-1.6.0-less-acpi-brokenness.patch
@ -85,7 +85,6 @@ Patch6053: xserver-1.8-disable-vboxvideo.patch
Patch7005: xserver-1.9.0-qxl-fallback.patch
Patch7006: xserver-1.10-pointer-barriers.patch
Patch7007: xserver-1.10-vbe-malloc.patch
# from ajax/xserver-next
Patch7008: xserver-1.10-glx-pixmap-crash.patch
Patch7009: xserver-1.10-bg-none-revert.patch
@ -553,6 +552,11 @@ rm -rf $RPM_BUILD_ROOT
%{xserver_source_dir}
%changelog
* Tue Apr 19 2011 Peter Hutterer <peter.hutterer@redhat.com> 1.10.99.1-2.20110418
- rebase all patches
- xserver-1.10-vbe-malloc.patch: drop, d8caa782009abf4d
- "git rm" all unused patches
* Mon Apr 18 2011 Peter Hutterer <peter.hutterer@redhat.com> 1.10.99.1-1.20110418
- Today's server from git

View File

@ -1,7 +1,7 @@
From 3bc6ed2d8c9028ec28015d05b60af67a194f3694 Mon Sep 17 00:00:00 2001
From 2223b2b953fc6034d28d85dfe3f97652ca375beb Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Tue, 29 Mar 2011 10:09:46 -0400
Subject: [PATCH 2/2] Revert "composite: Don't backfill non-bg-None windows"
Subject: [PATCH 9/9] Revert "composite: Don't backfill non-bg-None windows"
This reverts commit 6dd775f57d2f94f0ddaee324aeec33b9b66ed5bc.
@ -58,5 +58,5 @@ index e4064f6..7164c0d 100644
{
GCPtr pGC = GetScratchGC (pWin->drawable.depth, pScreen);
--
1.7.4.1
1.7.4.4

View File

@ -1,7 +1,7 @@
From 2fefa1aff56f6d24dcc0206c60da3d9487832504 Mon Sep 17 00:00:00 2001
From 070319e6e49f762ccaba06c7241c00e4afcb7c05 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Wed, 30 Mar 2011 16:03:53 -0400
Subject: [PATCH] glx: Fix lifetime tracking for pixmaps
Subject: [PATCH 8/9] glx: Fix lifetime tracking for pixmaps
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -20,10 +20,10 @@ Signed-off-by: Adam Jackson <ajax@redhat.com>
2 files changed, 20 insertions(+), 13 deletions(-)
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 9b4bc9e..9d60bdb 100644
index 66d4c7e..d5b764f 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1177,10 +1177,11 @@ DoCreateGLXDrawable(ClientPtr client, __GLXscreen *pGlxScreen,
@@ -1127,10 +1127,11 @@ DoCreateGLXDrawable(ClientPtr client, __GLXscreen *pGlxScreen,
return BadAlloc;
}
@ -39,7 +39,7 @@ index 9b4bc9e..9d60bdb 100644
!AddResource(pDraw->id, __glXDrawableRes, pGlxDraw)) {
pGlxDraw->destroy (pGlxDraw);
return BadAlloc;
@@ -1211,6 +1212,8 @@ DoCreateGLXPixmap(ClientPtr client, __GLXscreen *pGlxScreen, __GLXconfig *config
@@ -1161,6 +1162,8 @@ DoCreateGLXPixmap(ClientPtr client, __GLXscreen *pGlxScreen, __GLXconfig *config
err = DoCreateGLXDrawable(client, pGlxScreen, config, pDraw, drawableId,
glxDrawableId, GLX_DRAWABLE_PIXMAP);
@ -49,10 +49,10 @@ index 9b4bc9e..9d60bdb 100644
}
diff --git a/glx/glxext.c b/glx/glxext.c
index 4bd5d6b..cec3ee5 100644
index 3f3dd79..9cfc096 100644
--- a/glx/glxext.c
+++ b/glx/glxext.c
@@ -124,15 +124,15 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
@@ -118,15 +118,15 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
{
__GLXcontext *c, *next;
@ -77,8 +77,8 @@ index 4bd5d6b..cec3ee5 100644
}
for (c = glxAllContexts; c; c = next) {
@@ -168,6 +168,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
__glXFreeContext(c);
@@ -143,6 +143,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid)
c->readPriv = NULL;
}
+ /* drop our reference to any backing pixmap */
@ -89,5 +89,5 @@ index 4bd5d6b..cec3ee5 100644
return True;
--
1.7.4.1
1.7.4.4

View File

@ -1,105 +1,22 @@
From 14f1112bec18ccece8e732fe6c200a56546230c7 Mon Sep 17 00:00:00 2001
From fb72637557fa1d9135bb4028d8603c8f8b6dee58 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Thu, 17 Mar 2011 13:56:17 -0400
Subject: [PATCH] CRTC confine and pointer barriers
Subject: [PATCH 7/9] CRTC confine and pointer barriers
---
dix/events.c | 7 +
dix/getevents.c | 12 +-
include/dix.h | 1 +
include/protocol-versions.h | 2 +-
mi/mipointer.c | 16 ++-
mi/mipointer.h | 6 +
randr/randr.c | 2 +
randr/randrstr.h | 4 +
randr/rrcrtc.c | 155 ++++++++++++++++
test/Makefile.am | 4 +-
test/Makefile.am | 3 +-
xfixes/cursor.c | 408 ++++++++++++++++++++++++++++++++++++++++++-
xfixes/xfixes.c | 24 ++-
xfixes/xfixes.h | 17 ++
xfixes/xfixesint.h | 16 ++
14 files changed, 658 insertions(+), 16 deletions(-)
6 files changed, 458 insertions(+), 12 deletions(-)
diff --git a/dix/events.c b/dix/events.c
index 07f8b05..d2be84f 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -328,6 +328,13 @@ IsMaster(DeviceIntPtr dev)
return dev->type == MASTER_POINTER || dev->type == MASTER_KEYBOARD;
}
+Bool
+IsFloating(DeviceIntPtr dev)
+{
+ return GetMaster(dev, MASTER_KEYBOARD) == NULL;
+}
+
+
/**
* Max event opcode.
*/
diff --git a/dix/getevents.c b/dix/getevents.c
index 794df42..c66e516 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -812,7 +812,11 @@ accelPointer(DeviceIntPtr dev, int first, int num, int *valuators, CARD32 ms)
* miPointerSetPosition() and then scale back into device coordinates (if
* needed). miPSP will change x/y if the screen was crossed.
*
+ * The coordinates provided are always absolute. The parameter mode whether
+ * it was relative or absolute movement that landed us at those coordinates.
+ *
* @param dev The device to be moved.
+ * @param mode Movement mode (Absolute or Relative)
* @param x Pointer to current x-axis value, may be modified.
* @param y Pointer to current y-axis value, may be modified.
* @param x_frac Fractional part of current x-axis value, may be modified.
@@ -824,7 +828,8 @@ accelPointer(DeviceIntPtr dev, int first, int num, int *valuators, CARD32 ms)
* @param screeny_frac Fractional part of screen y coordinate, as above.
*/
static void
-positionSprite(DeviceIntPtr dev, int *x, int *y, float x_frac, float y_frac,
+positionSprite(DeviceIntPtr dev, int mode,
+ int *x, int *y, float x_frac, float y_frac,
ScreenPtr scr, int *screenx, int *screeny, float *screenx_frac, float *screeny_frac)
{
int old_screenx, old_screeny;
@@ -863,7 +868,7 @@ positionSprite(DeviceIntPtr dev, int *x, int *y, float x_frac, float y_frac,
old_screeny = *screeny;
/* This takes care of crossing screens for us, as well as clipping
* to the current screen. */
- miPointerSetPosition(dev, screenx, screeny);
+ _miPointerSetPosition(dev, mode, screenx, screeny);
if (dev->u.master) {
dev->u.master->last.valuators[0] = *screenx;
@@ -1193,7 +1198,8 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons,
set_raw_valuators(raw, &mask, raw->valuators.data);
- positionSprite(pDev, &x, &y, x_frac, y_frac, scr, &cx, &cy, &cx_frac, &cy_frac);
+ positionSprite(pDev, (flags & POINTER_ABSOLUTE) ? Absolute : Relative,
+ &x, &y, x_frac, y_frac, scr, &cx, &cy, &cx_frac, &cy_frac);
updateHistory(pDev, &mask, ms);
/* Update the valuators with the true value sent to the client*/
diff --git a/include/dix.h b/include/dix.h
index 12e4b59..3f99098 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -570,6 +570,7 @@ extern Bool _X_EXPORT IsPointerDevice( DeviceIntPtr dev);
extern Bool _X_EXPORT IsKeyboardDevice(DeviceIntPtr dev);
extern Bool IsPointerEvent(InternalEvent *event);
extern _X_EXPORT Bool IsMaster(DeviceIntPtr dev);
+extern _X_EXPORT Bool IsFloating(DeviceIntPtr dev);
extern _X_HIDDEN void CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
extern _X_HIDDEN int CorePointerProc(DeviceIntPtr dev, int what);
diff --git a/include/protocol-versions.h b/include/protocol-versions.h
index 1d33bdd..1dc66ad 100644
index 8692ded..7b7a9f5 100644
--- a/include/protocol-versions.h
+++ b/include/protocol-versions.h
@@ -126,7 +126,7 @@
@@ -122,7 +122,7 @@
#define SERVER_XF86VIDMODE_MINOR_VERSION 2
/* Fixes */
@ -108,327 +25,23 @@ index 1d33bdd..1dc66ad 100644
#define SERVER_XFIXES_MINOR_VERSION 0
/* X Input */
diff --git a/mi/mipointer.c b/mi/mipointer.c
index 554397a..85f1949 100644
--- a/mi/mipointer.c
+++ b/mi/mipointer.c
@@ -229,6 +229,10 @@ miPointerSetCursorPosition(DeviceIntPtr pDev, ScreenPtr pScreen,
SetupScreen (pScreen);
GenerateEvent = generateEvent;
+
+ if (pScreen->ConstrainCursorHarder)
+ pScreen->ConstrainCursorHarder(pDev, pScreen, Absolute, &x, &y);
+
/* device dependent - must pend signal and call miPointerWarpCursor */
(*pScreenPriv->screenFuncs->WarpCursor) (pDev, pScreen, x, y);
if (!generateEvent)
@@ -484,7 +488,7 @@ miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen,
}
void
-miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y)
+_miPointerSetPosition(DeviceIntPtr pDev, int mode, int *x, int *y)
{
miPointerScreenPtr pScreenPriv;
ScreenPtr pScreen;
@@ -529,6 +533,9 @@ miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y)
if (*y >= pPointer->limits.y2)
*y = pPointer->limits.y2 - 1;
+ if (pScreen->ConstrainCursorHarder)
+ pScreen->ConstrainCursorHarder(pDev, pScreen, mode, x, y);
+
if (pPointer->x == *x && pPointer->y == *y &&
pPointer->pScreen == pScreen)
return;
@@ -536,6 +543,13 @@ miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y)
miPointerMoveNoEvent(pDev, pScreen, *x, *y);
}
+/* ABI hack */
+void
+miPointerSetPosition(DeviceIntPtr pDev, int *x, int *y)
+{
+ _miPointerSetPosition(pDev, Absolute, x, y);
+}
+
void
miPointerGetPosition(DeviceIntPtr pDev, int *x, int *y)
{
diff --git a/mi/mipointer.h b/mi/mipointer.h
index 3c86110..6b6010c 100644
--- a/mi/mipointer.h
+++ b/mi/mipointer.h
@@ -131,6 +131,12 @@ extern _X_EXPORT void miPointerGetPosition(
/* Moves the cursor to the specified position. May clip the co-ordinates:
* x and y are modified in-place. */
+extern _X_EXPORT void _miPointerSetPosition(
+ DeviceIntPtr pDev,
+ int mode,
+ int *x,
+ int *y);
+
extern _X_EXPORT void miPointerSetPosition(
DeviceIntPtr pDev,
int *x,
diff --git a/randr/randr.c b/randr/randr.c
index 6077705..d337129 100644
--- a/randr/randr.c
+++ b/randr/randr.c
@@ -270,6 +270,8 @@ Bool RRScreenInit(ScreenPtr pScreen)
wrap (pScrPriv, pScreen, CloseScreen, RRCloseScreen);
+ pScreen->ConstrainCursorHarder = RRConstrainCursorHarder;
+
pScrPriv->numOutputs = 0;
pScrPriv->outputs = NULL;
pScrPriv->numCrtcs = 0;
diff --git a/randr/randrstr.h b/randr/randrstr.h
index 7ea6080..d8dd37d 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -297,6 +297,7 @@ typedef struct _rrScrPriv {
int rate;
int size;
#endif
+ Bool discontiguous;
} rrScrPrivRec, *rrScrPrivPtr;
extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
@@ -700,6 +701,9 @@ ProcRRGetPanning (ClientPtr client);
int
ProcRRSetPanning (ClientPtr client);
+void
+RRConstrainCursorHarder (DeviceIntPtr, ScreenPtr, int, int *, int *);
+
/* rrdispatch.c */
extern _X_EXPORT Bool
RRClientKnowsRates (ClientPtr pClient);
diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c
index 98206a2..d4d8f2a 100644
--- a/randr/rrcrtc.c
+++ b/randr/rrcrtc.c
@@ -1,5 +1,6 @@
/*
* Copyright © 2006 Keith Packard
+ * Copyright 2010 Red Hat, Inc
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
@@ -22,6 +23,7 @@
#include "randrstr.h"
#include "swaprep.h"
+#include "mipointer.h"
RESTYPE RRCrtcType;
@@ -292,6 +294,92 @@ RRCrtcPendingProperties (RRCrtcPtr crtc)
return FALSE;
}
+static void
+crtc_bounds(RRCrtcPtr crtc, int *left, int *right, int *top, int *bottom)
+{
+ *left = crtc->x;
+ *top = crtc->y;
+
+ switch (crtc->rotation) {
+ case RR_Rotate_0:
+ case RR_Rotate_180:
+ default:
+ *right = crtc->x + crtc->mode->mode.width;
+ *bottom = crtc->y + crtc->mode->mode.height;
+ return;
+ case RR_Rotate_90:
+ case RR_Rotate_270:
+ *right = crtc->x + crtc->mode->mode.height;
+ *bottom = crtc->y + crtc->mode->mode.width;
+ return;
+ }
+}
+
+/* overlapping counts as adjacent */
+static Bool
+crtcs_adjacent(const RRCrtcPtr a, const RRCrtcPtr b)
+{
+ /* left, right, top, bottom... */
+ int al, ar, at, ab;
+ int bl, br, bt, bb;
+ int cl, cr, ct, cb; /* the overlap, if any */
+
+ crtc_bounds(a, &al, &ar, &at, &ab);
+ crtc_bounds(b, &bl, &br, &bt, &bb);
+
+ cl = max(al, bl);
+ cr = min(ar, br);
+ ct = max(at, bt);
+ cb = min(ab, bb);
+
+ return (cl <= cr) && (ct <= cb);
+}
+
+/* Depth-first search and mark all CRTCs reachable from cur */
+static void
+mark_crtcs (rrScrPrivPtr pScrPriv, int *reachable, int cur)
+{
+ int i;
+ reachable[cur] = TRUE;
+ for (i = 0; i < pScrPriv->numCrtcs; ++i) {
+ if (reachable[i] || !pScrPriv->crtcs[i]->mode)
+ continue;
+ if (crtcs_adjacent(pScrPriv->crtcs[cur], pScrPriv->crtcs[i]))
+ mark_crtcs(pScrPriv, reachable, i);
+ }
+}
+
+static void
+RRComputeContiguity (ScreenPtr pScreen)
+{
+ rrScrPriv(pScreen);
+ Bool discontiguous = TRUE;
+ int i, n = pScrPriv->numCrtcs;
+
+ int *reachable = calloc(n, sizeof(int));
+ if (!reachable)
+ goto out;
+
+ /* Find first enabled CRTC and start search for reachable CRTCs from it */
+ for (i = 0; i < n; ++i) {
+ if (pScrPriv->crtcs[i]->mode) {
+ mark_crtcs(pScrPriv, reachable, i);
+ break;
+ }
+ }
+
+ /* Check that all enabled CRTCs were marked as reachable */
+ for (i = 0; i < n; ++i)
+ if (pScrPriv->crtcs[i]->mode && !reachable[i])
+ goto out;
+
+ discontiguous = FALSE;
+
+out:
+ free(reachable);
+ pScrPriv->discontiguous = discontiguous;
+}
+
/*
* Request that the Crtc be reconfigured
*/
@@ -306,6 +394,7 @@ RRCrtcSet (RRCrtcPtr crtc,
{
ScreenPtr pScreen = crtc->pScreen;
Bool ret = FALSE;
+ Bool recompute = TRUE;
rrScrPriv(pScreen);
/* See if nothing changed */
@@ -318,6 +407,7 @@ RRCrtcSet (RRCrtcPtr crtc,
!RRCrtcPendingProperties (crtc) &&
!RRCrtcPendingTransform (crtc))
{
+ recompute = FALSE;
ret = TRUE;
}
else
@@ -381,6 +471,10 @@ RRCrtcSet (RRCrtcPtr crtc,
RRPostPendingProperties (outputs[o]);
}
}
+
+ if (recompute)
+ RRComputeContiguity(pScreen);
+
return ret;
}
@@ -1349,3 +1443,64 @@ ProcRRGetCrtcTransform (ClientPtr client)
free(reply);
return Success;
}
+
+void
+RRConstrainCursorHarder(DeviceIntPtr pDev, ScreenPtr pScreen, int mode, int *x, int *y)
+{
+ rrScrPriv (pScreen);
+ int i;
+
+ /* intentional dead space -> let it float */
+ if (pScrPriv->discontiguous)
+ return;
+
+ /* if we're moving inside a crtc, we're fine */
+ for (i = 0; i < pScrPriv->numCrtcs; i++) {
+ RRCrtcPtr crtc = pScrPriv->crtcs[i];
+
+ int left, right, top, bottom;
+
+ if (!crtc->mode)
+ continue;
+
+ crtc_bounds(crtc, &left, &right, &top, &bottom);
+
+ if ((*x >= left) && (*x <= right) && (*y >= top) && (*y <= bottom))
+ return;
+ }
+
+ /* if we're trying to escape, clamp to the CRTC we're coming from */
+ for (i = 0; i < pScrPriv->numCrtcs; i++) {
+ RRCrtcPtr crtc = pScrPriv->crtcs[i];
+ int nx, ny;
+ int left, right, top, bottom;
+
+ if (!crtc->mode)
+ continue;
+
+ crtc_bounds(crtc, &left, &right, &top, &bottom);
+ miPointerGetPosition(pDev, &nx, &ny);
+
+ if ((nx >= left) && (nx <= right) && (ny >= top) && (ny <= bottom)) {
+ if ((*x <= left) || (*x >= right)) {
+ int dx = *x - nx;
+
+ if (dx > 0)
+ *x = right;
+ else if (dx < 0)
+ *x = left;
+ }
+
+ if ((*y <= top) || (*y >= bottom)) {
+ int dy = *y - ny;
+
+ if (dy > 0)
+ *y = bottom;
+ else if (dy < 0)
+ *y = top;
+ }
+
+ return;
+ }
+ }
+}
diff --git a/test/Makefile.am b/test/Makefile.am
index 456221e..ccdb859 100644
index f3265b7..b60d319 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,6 +1,6 @@
if UNITTESTS
@@ -2,7 +2,7 @@ if ENABLE_UNIT_TESTS
if HAVE_GLIB
if HAVE_LD_WRAP
SUBDIRS= . xi2
-check_PROGRAMS = xkb input xtest
+check_PROGRAMS = xkb input xtest list fixes
-noinst_PROGRAMS = xkb input xtest list
+noinst_PROGRAMS = xkb input xtest list fixes
check_LTLIBRARIES = libxservertest.la
TESTS=$(check_PROGRAMS)
@@ -16,6 +16,8 @@ endif
xkb_LDADD=$(TEST_LDADD)
TESTS=$(noinst_PROGRAMS)
@@ -19,6 +19,7 @@ xkb_LDADD=$(TEST_LDADD)
input_LDADD=$(TEST_LDADD)
xtest_LDADD=$(TEST_LDADD)
+list_LDADD=$(TEST_LDADD)
list_LDADD=$(TEST_LDADD)
+fixes_LDADD=$(TEST_LDADD)
libxservertest_la_LIBADD = \
@ -914,7 +527,7 @@ index fb608f6..5c55c95 100644
}
diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c
index e8c7bf1..a57884b 100644
index e8c7bf1..de0e4db 100644
--- a/xfixes/xfixes.c
+++ b/xfixes/xfixes.c
@@ -1,5 +1,6 @@
@ -1050,5 +663,5 @@ index d005369..6ba276e 100644
void PanoramiXFixesInit (void);
void PanoramiXFixesReset (void);
--
1.7.4
1.7.4.4

View File

@ -1,43 +0,0 @@
From 0ab680f08208afe51ad6ddc1018b7d6f8b851840 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Thu, 24 Feb 2011 16:06:34 -0500
Subject: [PATCH] vbe: Fix malloc size bug
v2: Slightly more obvious sizing math.
==14882== Invalid write of size 2
==14882== at 0x6750267: VBEGetVBEInfo (vbe.c:400)
==14882== by 0x6142064: ??? (in /usr/lib64/xorg/modules/drivers/vesa_drv.so)
==14882== by 0x471895: InitOutput (xf86Init.c:519)
==14882== by 0x422778: main (main.c:205)
==14882== Address 0x4f32fa8 is 72 bytes inside a block of size 73 alloc'd
==14882== at 0x4A0640D: malloc (vg_replace_malloc.c:236)
==14882== by 0x675024B: VBEGetVBEInfo (vbe.c:398)
==14882== by 0x6142064: ??? (in /usr/lib64/xorg/modules/drivers/vesa_drv.so)
==14882== by 0x471895: InitOutput (xf86Init.c:519)
==14882== by 0x422778: main (main.c:205)
Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit d8caa782009abf4dc17b945e325e83fda299a534)
---
hw/xfree86/vbe/vbe.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/vbe/vbe.c b/hw/xfree86/vbe/vbe.c
index bcda5ec..04132d9 100644
--- a/hw/xfree86/vbe/vbe.c
+++ b/hw/xfree86/vbe/vbe.c
@@ -395,7 +395,7 @@ VBEGetVBEInfo(vbeInfoPtr pVbe)
i = 0;
while (modes[i] != 0xffff)
i++;
- block->VideoModePtr = malloc(sizeof(CARD16) * i + 1);
+ block->VideoModePtr = malloc(sizeof(CARD16) * (i + 1));
memcpy(block->VideoModePtr, modes, sizeof(CARD16) * i);
block->VideoModePtr[i] = 0xffff;
--
1.7.4

View File

@ -1,26 +0,0 @@
From c799dd4390e5ea301c8f4f81784ac590b97f7a07 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Tue, 10 Feb 2009 10:25:19 -0500
Subject: [PATCH] autoconfig: ignore poulsbo
Thanks, Intel.
---
hw/xfree86/common/xf86AutoConfig.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
index a9a1fd2..19c06c8 100644
--- a/hw/xfree86/common/xf86AutoConfig.c
+++ b/hw/xfree86/common/xf86AutoConfig.c
@@ -171,6 +171,8 @@ videoPtrToDriverList(struct pci_device *dev,
case 0x8086:
if ((dev->device_id == 0x00d1) || (dev->device_id == 0x7800)) {
driverList[0] = "i740";
+ } else if (dev->device_id == 0x8108) {
+ break; /* you got powervr in my intel! */
} else {
driverList[0] = "intel";
driverList[1] = "i810";
--
1.6.1.2

View File

@ -1,7 +1,7 @@
From 47c3d565596ad3d5c837fb6909a40f7a251c248d Mon Sep 17 00:00:00 2001
From f14a89c627d9c4d790cc6785dd6628c9bda1c317 Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Thu, 18 Jun 2009 16:56:41 +1000
Subject: [PATCH] displayfd hack
Subject: [PATCH 3/9] displayfd hack
---
dix/globals.c | 1 +
@ -35,7 +35,7 @@ index 5c70717..f23203f 100644
extern _X_EXPORT int defaultBackingStore;
extern _X_EXPORT Bool disableBackingStore;
diff --git a/os/connection.c b/os/connection.c
index 5452ae1..9c20ef1 100644
index 0c580ab..1acdb7f 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -145,6 +145,7 @@ Bool AnyClientsWriteBlocked; /* true if some client blocked on write */
@ -149,10 +149,10 @@ index 5452ae1..9c20ef1 100644
}
diff --git a/os/utils.c b/os/utils.c
index afdff0c..6866740 100644
index 36cb46f..6338860 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -657,6 +657,17 @@ ProcessCommandLine(int argc, char *argv[])
@@ -660,6 +660,17 @@ ProcessCommandLine(int argc, char *argv[])
else
UseMsg();
}
@ -171,5 +171,5 @@ index afdff0c..6866740 100644
else if ( strcmp( argv[i], "dpms") == 0)
/* ignored for compatibility */ ;
--
1.7.3.2
1.7.4.4

View File

@ -1,7 +1,7 @@
From 86c8a64b29a97a0562b6725ed163a6beac93fa12 Mon Sep 17 00:00:00 2001
From 42959f3af32ca14d4c15c37b6005acca324debdb Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Wed, 11 Mar 2009 14:02:11 -0400
Subject: [PATCH] Don't build the ACPI code.
Subject: [PATCH 1/9] Don't build the ACPI code.
No good can come of this.
---
@ -9,10 +9,10 @@ No good can come of this.
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index bd027cd..9adbdc5 100644
index 9e04ff0..b1175f5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1623,13 +1623,11 @@ if test "x$XORG" = xyes; then
@@ -1570,13 +1570,11 @@ if test "x$XORG" = xyes; then
case $host_cpu in
ia64*)
linux_ia64=yes
@ -27,5 +27,5 @@ index bd027cd..9adbdc5 100644
*)
;;
--
1.7.3.2
1.7.4.4

View File

@ -1,81 +1,15 @@
From 2e79f2eb5a0fbef5f0698b066938d8f1ada44698 Mon Sep 17 00:00:00 2001
From f5e43a8e1bcbb9eab0ca6fcef6c26b6e83eca483 Mon Sep 17 00:00:00 2001
From: Fedora X Ninjas <x@fedoraproject.org>
Date: Tue, 16 Feb 2010 11:38:17 +1000
Subject: [PATCH] autoconfig: select nouveau by default for NVIDIA GPUs
Subject: [PATCH 2/9] autoconfig: select nouveau by default for NVIDIA GPUs
Also, don't treat DRI setup failure as an error for nouveau.
---
glx/glxdri.c | 7 +++++--
glx/glxdri2.c | 7 +++++--
hw/xfree86/common/xf86pciBus.c | 18 +++++++++++++++++-
3 files changed, 27 insertions(+), 5 deletions(-)
1 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/glx/glxdri.c b/glx/glxdri.c
index db3fcd5..82cdb87 100644
--- a/glx/glxdri.c
+++ b/glx/glxdri.c
@@ -979,6 +979,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
const __DRIconfig **driConfigs;
const __DRIextension **extensions;
int i;
+ int from = X_ERROR;
if (!xf86LoaderCheckSymbol("DRIQueryDirectRenderingCapable") ||
!DRIQueryDirectRenderingCapable(pScreen, &isCapable) ||
@@ -1058,7 +1059,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen->driver = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
if (screen->driver == NULL) {
- LogMessage(X_ERROR, "AIGLX error: dlopen of %s failed (%s)\n",
+ if (!strcmp(driverName, "nouveau"))
+ from = X_INFO;
+ LogMessage(from, "AIGLX error: dlopen of %s failed (%s)\n",
filename, dlerror());
goto handle_error;
}
@@ -1194,7 +1197,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
free(screen);
- LogMessage(X_ERROR, "AIGLX: reverting to software rendering\n");
+ LogMessage(from, "AIGLX: reverting to software rendering\n");
return NULL;
}
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 0b69201..1c58023 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -709,6 +709,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
const __DRIextension **extensions;
const __DRIconfig **driConfigs;
int i;
+ int from = X_ERROR;
screen = calloc(1, sizeof *screen);
if (screen == NULL)
@@ -735,7 +736,9 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
screen->driver = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
if (screen->driver == NULL) {
- LogMessage(X_ERROR, "AIGLX error: dlopen of %s failed (%s)\n",
+ if (!strcmp(driverName, "nouveau"))
+ from = X_INFO;
+ LogMessage(from, "AIGLX error: dlopen of %s failed (%s)\n",
filename, dlerror());
goto handle_error;
}
@@ -827,7 +830,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen)
free(screen);
- LogMessage(X_ERROR, "AIGLX: reverting to software rendering\n");
+ LogMessage(from, "AIGLX: reverting to software rendering\n");
return NULL;
}
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index 3e9c455..e34e6d6 100644
index 447b192..26d6cad 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -1123,7 +1123,23 @@ videoPtrToDriverList(struct pci_device *dev,
@ -104,5 +38,5 @@ index 3e9c455..e34e6d6 100644
case 0x1b36: driverList[0] = "qxl"; break;
case 0x1163: driverList[0] = "rendition"; break;
--
1.7.3.2
1.7.4.4

View File

@ -1,7 +1,7 @@
From ebc70eaa0f7a60e7fb88f3173b3e86a78ab9be79 Mon Sep 17 00:00:00 2001
From 12aa6574fd87ec28186a75256a5111e9703d932e Mon Sep 17 00:00:00 2001
From: Adam Jackson <ajax@redhat.com>
Date: Tue, 28 Jul 2009 11:07:13 -0400
Subject: [PATCH] RANDR: right-of placement by default
Subject: [PATCH 4/9] RANDR: right-of placement by default
[Enhanced to add a new prefer clone option for drivers. This
allows for servers like RN50 where two heads are disjoint. - airlied]
@ -48,10 +48,10 @@ index 0493dc5..d66e373 100644
* These can be used when the minor ABI version is incremented.
* The NUM_* parameters must be reduced appropriately to keep the
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
index b5e9dc2..38ce9d0 100644
index c2814d4..b25876f 100644
--- a/hw/xfree86/modes/xf86Crtc.c
+++ b/hw/xfree86/modes/xf86Crtc.c
@@ -1169,6 +1169,15 @@ xf86InitialOutputPositions (ScrnInfoPtr scrn, DisplayModePtr *modes)
@@ -1139,6 +1139,15 @@ xf86InitialOutputPositions (ScrnInfoPtr scrn, DisplayModePtr *modes)
int o;
int min_x, min_y;
@ -67,7 +67,7 @@ index b5e9dc2..38ce9d0 100644
for (o = 0; o < config->num_output; o++)
{
xf86OutputPtr output = config->output[o];
@@ -2052,6 +2061,57 @@ bestModeForAspect(xf86CrtcConfigPtr config, Bool *enabled, float aspect)
@@ -2030,6 +2039,57 @@ bestModeForAspect(xf86CrtcConfigPtr config, Bool *enabled, float aspect)
return match;
}
@ -125,7 +125,7 @@ index b5e9dc2..38ce9d0 100644
static Bool
xf86TargetPreferred(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
DisplayModePtr *modes, Bool *enabled,
@@ -2109,13 +2169,9 @@ xf86TargetPreferred(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
@@ -2087,13 +2147,9 @@ xf86TargetPreferred(ScrnInfoPtr scrn, xf86CrtcConfigPtr config,
* biggest mode for its aspect ratio, assuming one exists.
*/
if (!ret) do {
@ -140,7 +140,7 @@ index b5e9dc2..38ce9d0 100644
break;
p = -1;
@@ -2409,6 +2465,8 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
@@ -2388,6 +2444,8 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
} else {
if (xf86TargetUserpref(scrn, config, modes, enabled, width, height))
xf86DrvMsg(i, X_INFO, "Using user preference for initial modes\n");
@ -149,7 +149,7 @@ index b5e9dc2..38ce9d0 100644
else if (xf86TargetPreferred(scrn, config, modes, enabled, width, height))
xf86DrvMsg(i, X_INFO, "Using exact sizes for initial modes\n");
else if (xf86TargetAspect(scrn, config, modes, enabled, width, height))
@@ -2426,8 +2484,10 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
@@ -2405,8 +2463,10 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
config->output[o]->name);
else
xf86DrvMsg (scrn->scrnIndex, X_INFO,
@ -163,5 +163,5 @@ index b5e9dc2..38ce9d0 100644
/*
--
1.7.4
1.7.4.4

View File

@ -1,59 +0,0 @@
From 11eea736f44a236dde884b52ad51cb5d1271b7a5 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 13 Jan 2010 15:03:45 +1000
Subject: [PATCH] Xi: reset the sli pointers after copying device classes. (#25640)
If the indicator flags have the XkbSLI_IsDefault bit set, the indicator map
and names aren't their own bit of memory but rather point into the
device->key->xkbInfo->desc structure. XkbCopySrvLedInfo knows about this and
leaves the pointers alone.
When copying the classes from the slave to the master, these pointers are
copied and still point to the dev->key class of the slave device. If the
slave device is removed, the memory becomes invalid and a call to modify
this data (e.g. XkbSetIndicators) may cause a deadlock.
The copying of dev->key relies on dev->kbdfeed to be already set up. Hence
the pointers need to be reset once _both_ kbdfeed and key have been copied
into the master device.
X.Org Bug 25640 <http://bugs.freedesktop.org/show_bug.cgi?id=25640>
Fedora Bug 540584 <https://bugzilla.redhat.com/show_bug.cgi?id=540584>
---
Xi/exevents.c | 20 ++++++++++++++++++++
1 files changed, 20 insertions(+), 0 deletions(-)
diff --git a/Xi/exevents.c b/Xi/exevents.c
index cb2452b..ee32ba8 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -444,6 +444,26 @@ DeepCopyKeyboardClasses(DeviceIntPtr from, DeviceIntPtr to)
to->key = NULL;
}
+ /* If a SrvLedInfoPtr's flags are XkbSLI_IsDefault, the names and maps
+ * pointer point into the xkbInfo->desc struct. XkbCopySrvLedInfo
+ * didn't update the pointers so we need to do it manually here.
+ */
+ if (to->kbdfeed)
+ {
+ KbdFeedbackPtr k;
+
+ for (k = to->kbdfeed; k; k = k->next)
+ {
+ if (!k->xkb_sli)
+ continue;
+ if (k->xkb_sli->flags & XkbSLI_IsDefault)
+ {
+ k->xkb_sli->names = to->key->xkbInfo->desc->names->indicators;
+ k->xkb_sli->maps = to->key->xkbInfo->desc->indicators->maps;
+ }
+ }
+ }
+
/* We can't just copy over the focus class. When an app sets the focus,
* it'll do so on the master device. Copying the SDs focus means losing
* the focus.
--
1.6.6

View File

@ -1,26 +0,0 @@
From 6db7cc3d3f750bbb1c170f8fe538e9fb75bc5b34 Mon Sep 17 00:00:00 2001
From: Adam Tkac <atkac@redhat.com>
Date: Wed, 14 Apr 2010 12:16:26 +0200
Subject: [PATCH] Export XkbCopyDeviceKeymap from Xorg, it is needed by VNC.
Signed-off-by: Adam Tkac <atkac@redhat.com>
---
include/xkbsrv.h | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index ebc7cdb..dc3142a 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -936,7 +936,7 @@ extern Bool XkbCopyKeymap(
XkbDescPtr /* dst */,
XkbDescPtr /* src */);
-extern Bool XkbCopyDeviceKeymap(
+extern _X_EXPORT Bool XkbCopyDeviceKeymap(
DeviceIntPtr /* dst */,
DeviceIntPtr /* src */);
--
1.7.0.1

View File

@ -1,14 +1,14 @@
From b0ca931d1ecd03bce114964a57da5e33f81dc46d Mon Sep 17 00:00:00 2001
From 8f5d13bea017198598dcbbcc86d6ada06fc0fdc4 Mon Sep 17 00:00:00 2001
From: Adam Williamson <adamwill@shaw.ca>
Date: Thu, 25 Feb 2010 10:34:49 -0800
Subject: [PATCH] disable vboxvideo driver in autodetect code
Subject: [PATCH 5/9] disable vboxvideo driver in autodetect code
---
hw/xfree86/common/xf86pciBus.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index e34e6d6..aaacf42 100644
index 26d6cad..4640ede 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -1167,7 +1167,7 @@ videoPtrToDriverList(struct pci_device *dev,
@ -21,5 +21,5 @@ index e34e6d6..aaacf42 100644
case 0x18ca:
if (dev->device_id == 0x47)
--
1.7.3.2
1.7.4.4

View File

@ -1,27 +0,0 @@
From 24f403a5b3f29016a135c615d6cb87bafcea4583 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
Date: Tue, 22 Jun 2010 18:19:38 +0200
Subject: [PATCH 17/17] XF86CONFIGDIR is undefined when built with --disable-xorg
---
config/Makefile.am | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/config/Makefile.am b/config/Makefile.am
index e1f1c4e..4a2e873 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -9,8 +9,10 @@ AM_CFLAGS += $(UDEV_CFLAGS)
libconfig_la_SOURCES += udev.c
libconfig_la_LIBADD = $(UDEV_LIBS)
+if XORG
xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR)
xorgconfd_DATA = 10-evdev.conf
+endif
else
--
1.7.1

View File

@ -1,496 +0,0 @@
From ad6c5e450cacee3777e7c541d4841ee580339a5d Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed, 7 Apr 2010 10:04:38 +1000
Subject: [PATCH 1/6] config: only match sane devices in 10-evdev.conf
Having a generic catchall also adds devices like accelerometers. These
devices make X unusable, hence restrict matching to "known sane" devices
like pointers, touchpads, keyboards, tablets and touchscreens.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Julien Cristau <jcristau@debian.org>
Acked-by: Dan Nicholson <dbn.lists@gmail.com>
Acked-by: James Cloos <cloos@jhcloos.com>
(cherry picked from commit c8a608cb6ce8f9c86258c1ab49084f691fa9cc51)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
config/10-evdev.conf | 36 ++++++++++++++++++++++++++++++++++--
1 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/config/10-evdev.conf b/config/10-evdev.conf
index 7406f4e..cc83ab2 100644
--- a/config/10-evdev.conf
+++ b/config/10-evdev.conf
@@ -1,8 +1,40 @@
#
# Catch-all evdev loader for udev-based systems
-#
+# We don't simply match on any device since that also adds accelerometers
+# and other devices that we don't really want to use. The list below
+# matches everything but joysticks.
+
Section "InputClass"
- Identifier "evdev-catchall"
+ Identifier "evdev pointer catchall"
+ MatchIsPointer "on"
+ MatchDevicePath "/dev/input/event*"
Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev keyboard catchall"
+ MatchIsKeyboard "on"
MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev touchpad catchall"
+ MatchIsTouchpad "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev tablet catchall"
+ MatchIsTablet "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
+EndSection
+
+Section "InputClass"
+ Identifier "evdev touchscreen catchall"
+ MatchIsTouchscreen "on"
+ MatchDevicePath "/dev/input/event*"
+ Driver "evdev"
EndSection
--
1.6.6.1
From eb07b8606f9a1349baf8114bb36dc2712e5d3419 Mon Sep 17 00:00:00 2001
From: Dan Nicholson <dbn.lists@gmail.com>
Date: Sat, 3 Apr 2010 09:33:47 -0700
Subject: [PATCH 2/6] xfree86: Allow adding sysconfdir and datadir to config search paths
We could just use $projectroot/etc and $projectroot/share, but the user
might have other plans for them.
Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 2460e921d18fd264e6f6374be0908f4100442650)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
hw/xfree86/parser/Makefile.am | 4 +++-
hw/xfree86/parser/scan.c | 14 ++++++++++++++
2 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/parser/Makefile.am b/hw/xfree86/parser/Makefile.am
index 49c191f..caf7079 100644
--- a/hw/xfree86/parser/Makefile.am
+++ b/hw/xfree86/parser/Makefile.am
@@ -34,7 +34,9 @@ libxf86config_a_SOURCES = \
$(INTERNAL_SOURCES)
libxf86config_a_CFLAGS = $(AM_CFLAGS) -fPIC -fvisibility=hidden
-AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS)
+AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) \
+ -DSYSCONFDIR=\"$(sysconfdir)\" \
+ -DDATADIR=\"$(datadir)\"
EXTRA_DIST = \
Configint.h \
diff --git a/hw/xfree86/parser/scan.c b/hw/xfree86/parser/scan.c
index cdca9ca..8aab0cf 100644
--- a/hw/xfree86/parser/scan.c
+++ b/hw/xfree86/parser/scan.c
@@ -599,6 +599,8 @@ xf86pathIsSafe(const char *path)
* %F config file environment ($XORGCONFIG) as a relative path
* %G config file environment ($XORGCONFIG) as a safe path
* %P projroot
+ * %C sysconfdir
+ * %D datadir
* %M major version number
* %% %
*/
@@ -615,6 +617,12 @@ xf86pathIsSafe(const char *path)
#ifndef PROJECTROOT
#define PROJECTROOT "/usr/X11R6"
#endif
+#ifndef SYSCONFDIR
+#define SYSCONFDIR PROJECTROOT "/etc"
+#endif
+#ifndef DATADIR
+#define DATADIR PROJECTROOT "/share"
+#endif
#ifndef XCONFENV
#define XCONFENV "XORGCONFIG"
#endif
@@ -755,6 +763,12 @@ DoSubstitution(const char *template, const char *cmdline, const char *projroot,
else
BAIL_OUT;
break;
+ case 'C':
+ APPEND_STR(SYSCONFDIR);
+ break;
+ case 'D':
+ APPEND_STR(DATADIR);
+ break;
case 'M':
if (!majorvers[0]) {
if (XF86_VERSION_MAJOR < 0 || XF86_VERSION_MAJOR > 99) {
--
1.6.6.1
From a4516965de447332794ee0afb9503c351fff6fe8 Mon Sep 17 00:00:00 2001
From: Dan Nicholson <dbn.lists@gmail.com>
Date: Sat, 3 Apr 2010 09:33:48 -0700
Subject: [PATCH 3/6] xfree86: Document how -configdir affects the xorg.conf.d search path
Explain the "safe" path dance for -configdir, too.
Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 2ac33888a9a5766aaf88bc92a8bd1d489873524c)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
hw/xfree86/doc/man/xorg.conf.man.pre | 36 +++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index 93c8ac4..9a40ce3 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -102,10 +102,12 @@ is the machine's hostname as reported by
.BR gethostname (__libmansuffix__).
.PP
Additional configuration files are searched for in the following
-directories:
+directories when the server is started as a normal user:
.PP
.RS 4
.nf
+.IR /etc/X11/ <cmdline>
+.IR __projectroot__/etc/X11/ <cmdline>
.I /etc/X11/__xconfigdir__\-4
.I /etc/X11/__xconfigdir__
.I /etc/__xconfigdir__
@@ -118,6 +120,38 @@ directories:
.fi
.RE
.PP
+where
+.I <cmdline>
+is a relative path (with no \(lq..\(rq components) specified with the
+.B \-configdir
+command line option.
+.PP
+When the __xservername__ server is started by the \(lqroot\(rq user, the
+config directory search locations are as follows:
+.PP
+.RS 4
+.nf
+<cmdline>
+.IR /etc/X11/ <cmdline>
+.IR __projectroot__/etc/X11/ <cmdline>
+.I /etc/X11/__xconfigdir__\-4
+.I /etc/X11/__xconfigdir__
+.I /etc/__xconfigdir__
+.IR __projectroot__/etc/X11/__xconfigdir__. <hostname>
+.I __projectroot__/etc/X11/__xconfigdir__\-4
+.I __projectroot__/etc/X11/__xconfigdir__
+.IR __projectroot__/lib/X11/__xconfigdir__. <hostname>
+.I __projectroot__/lib/X11/__xconfigdir__\-4
+.I __projectroot__/lib/X11/__xconfigdir__
+.fi
+.RE
+.PP
+where
+.I <cmdline>
+is the path specified with the
+.B \-configdir
+command line option (which may be absolute or relative).
+.PP
The
.I __xconfigfile__
and
--
1.6.6.1
From 0c4a358eae0e77f389380bbbf39d4419f2dd6dcd Mon Sep 17 00:00:00 2001
From: Dan Nicholson <dbn.lists@gmail.com>
Date: Sat, 3 Apr 2010 09:33:49 -0700
Subject: [PATCH 4/6] xfree86: Set a saner search path for xorg.conf.d
There's no reason to carry all the oddities from xorg.conf like appended
hostname to the search path for xorg.conf.d. This changes it to something
very simple:
/etc/X11/<cmdline>
$sysconfdir/X11/<cmdline>
/etc/X11/xorg.conf.d
$sysconfdir/X11/xorg.conf.d
Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit a1bae63dc634a5a79861eab128c63506081f7ed9)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
cpprules.in | 1 +
hw/xfree86/common/xf86Config.c | 16 ++++------------
hw/xfree86/doc/man/xorg.conf.man.pre | 22 ++++------------------
3 files changed, 9 insertions(+), 30 deletions(-)
diff --git a/cpprules.in b/cpprules.in
index 301305e..6e43578 100644
--- a/cpprules.in
+++ b/cpprules.in
@@ -34,6 +34,7 @@ MANDEFS = \
-D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
-D__mandir__=$(mandir) \
-D__projectroot__=$(prefix) \
+ -D__sysconfdir__=$(sysconfdir) \
-D__datadir__=$(datadir) \
-D__xconfigfile__=$(__XCONFIGFILE__) \
-D__xconfigdir__=$(__XCONFIGDIR__) \
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 718a078..d02c22a 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -97,20 +97,12 @@ extern DeviceAssocRec mouse_assoc;
#endif
#ifndef ROOT_CONFIGDIRPATH
#define ROOT_CONFIGDIRPATH "%A," "%R," \
- "/etc/X11/%R," "%P/etc/X11/%R," \
- "/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
- "%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
- "%P/etc/X11/%X," \
- "%P/lib/X11/%X.%H," "%P/lib/X11/%X-%M," \
- "%P/lib/X11/%X"
+ "/etc/X11/%R," "%C/X11/%R," \
+ "/etc/X11/%X," "%C/X11/%X"
#endif
#ifndef USER_CONFIGDIRPATH
-#define USER_CONFIGDIRPATH "/etc/X11/%S," "%P/etc/X11/%S," \
- "/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
- "%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
- "%P/etc/X11/%X," \
- "%P/lib/X11/%X.%H," "%P/lib/X11/%X-%M," \
- "%P/lib/X11/%X"
+#define USER_CONFIGDIRPATH "/etc/X11/%R," "%C/X11/%R," \
+ "/etc/X11/%X," "%C/X11/%X"
#endif
#ifndef PROJECTROOT
#define PROJECTROOT "/usr/X11R6"
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index 9a40ce3..acfa1ca 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -107,16 +107,9 @@ directories when the server is started as a normal user:
.RS 4
.nf
.IR /etc/X11/ <cmdline>
-.IR __projectroot__/etc/X11/ <cmdline>
-.I /etc/X11/__xconfigdir__\-4
+.IR __sysconfdir__/X11/ <cmdline>
.I /etc/X11/__xconfigdir__
-.I /etc/__xconfigdir__
-.IR __projectroot__/etc/X11/__xconfigdir__. <hostname>
-.I __projectroot__/etc/X11/__xconfigdir__\-4
-.I __projectroot__/etc/X11/__xconfigdir__
-.IR __projectroot__/lib/X11/__xconfigdir__. <hostname>
-.I __projectroot__/lib/X11/__xconfigdir__\-4
-.I __projectroot__/lib/X11/__xconfigdir__
+.I __sysconfdir__/X11/__xconfigdir__
.fi
.RE
.PP
@@ -133,16 +126,9 @@ config directory search locations are as follows:
.nf
<cmdline>
.IR /etc/X11/ <cmdline>
-.IR __projectroot__/etc/X11/ <cmdline>
-.I /etc/X11/__xconfigdir__\-4
+.IR __sysconfdir__/X11/ <cmdline>
.I /etc/X11/__xconfigdir__
-.I /etc/__xconfigdir__
-.IR __projectroot__/etc/X11/__xconfigdir__. <hostname>
-.I __projectroot__/etc/X11/__xconfigdir__\-4
-.I __projectroot__/etc/X11/__xconfigdir__
-.IR __projectroot__/lib/X11/__xconfigdir__. <hostname>
-.I __projectroot__/lib/X11/__xconfigdir__\-4
-.I __projectroot__/lib/X11/__xconfigdir__
+.I __sysconfdir__/X11/__xconfigdir__
.fi
.RE
.PP
--
1.6.6.1
From 59f96734633fce3c2bee62bce860aed33033ce3e Mon Sep 17 00:00:00 2001
From: Dan Nicholson <dbn.lists@gmail.com>
Date: Sat, 3 Apr 2010 10:08:25 -0700
Subject: [PATCH 5/6] xfree86: Search for a system xorg.conf.d
In addition to the conf files found in /etc/X11 or $sysconfdir/X11 used
for local administration, we also reserve a system directory for vendor
and package usage. The simple search path is:
/usr/share/X11/xorg.conf.d
$datadir/X11/xorg.conf.d
Files from these directories will have the lowest config priority. The
directory $datadir/X11/xorg.conf.d is exported from xorg-server.pc in
the variable "sysconfigdir". Packages should install their .conf files
to the directory specified by:
`pkg-config --variable=sysconfigdir xorg-server`
Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 95f01bdfee8241371675f0089170fa6b2908d815)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
configure.ac | 2 ++
hw/xfree86/common/xf86Config.c | 12 ++++++++++--
hw/xfree86/doc/man/xorg.conf.man.pre | 12 ++++++++++++
xorg-server.pc.in | 2 ++
4 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index a76eda3..48cb724 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1792,8 +1792,10 @@ if test "x$XORG" = xyes; then
AC_SUBST([driverdir])
sdkdir="$includedir/xorg"
extdir="$includedir/X11/extensions"
+ sysconfigdir="$datadir/X11/$XF86CONFIGDIR"
AC_SUBST([sdkdir])
AC_SUBST([extdir])
+ AC_SUBST([sysconfigdir])
AC_SUBST([logdir])
# stuff the ABI versions into the pc file too
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index d02c22a..1e9543f 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -104,6 +104,9 @@ extern DeviceAssocRec mouse_assoc;
#define USER_CONFIGDIRPATH "/etc/X11/%R," "%C/X11/%R," \
"/etc/X11/%X," "%C/X11/%X"
#endif
+#ifndef SYS_CONFIGDIRPATH
+#define SYS_CONFIGDIRPATH "/usr/share/X11/%X," "%D/X11/%X"
+#endif
#ifndef PROJECTROOT
#define PROJECTROOT "/usr/X11R6"
#endif
@@ -2421,7 +2424,7 @@ checkInput(serverLayoutPtr layout, Bool implicit_layout) {
ConfigStatus
xf86HandleConfigFile(Bool autoconfig)
{
- const char *filename, *dirname;
+ const char *filename, *dirname, *sysdirname;
char *filesearch, *dirsearch;
MessageType filefrom = X_DEFAULT;
MessageType dirfrom = X_DEFAULT;
@@ -2444,6 +2447,8 @@ xf86HandleConfigFile(Bool autoconfig)
dirfrom = X_CMDLINE;
xf86initConfigFiles();
+ sysdirname = xf86openConfigDirFiles(SYS_CONFIGDIRPATH, NULL,
+ PROJECTROOT);
dirname = xf86openConfigDirFiles(dirsearch, xf86ConfigDir, PROJECTROOT);
filename = xf86openConfigFile(filesearch, xf86ConfigFile, PROJECTROOT);
if (filename) {
@@ -2464,7 +2469,10 @@ xf86HandleConfigFile(Bool autoconfig)
"Unable to locate/open config directory: \"%s\"\n",
xf86ConfigDir);
}
- if (!filename && !dirname)
+ if (sysdirname)
+ xf86MsgVerb(X_DEFAULT, 0, "Using system config directory \"%s\"\n",
+ sysdirname);
+ if (!filename && !dirname && !sysdirname)
return CONFIG_NOFILE;
}
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre
index acfa1ca..4782d61 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -138,6 +138,18 @@ is the path specified with the
.B \-configdir
command line option (which may be absolute or relative).
.PP
+Finally, configuration files will also be searched for in directories
+reserved for system use. These are to separate configuration files from
+the vendor or 3rd party packages from those of local administration.
+These files are found in the following directories:
+.PP
+.RS 4
+.nf
+.I /usr/share/X11/__xconfigdir__
+.I __datadir__/X11/__xconfigdir__
+.fi
+.RE
+.PP
The
.I __xconfigfile__
and
diff --git a/xorg-server.pc.in b/xorg-server.pc.in
index 3d58dab..376cb93 100644
--- a/xorg-server.pc.in
+++ b/xorg-server.pc.in
@@ -2,8 +2,10 @@ prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
+datarootdir=@datarootdir@
moduledir=@moduledir@
sdkdir=@sdkdir@
+sysconfigdir=@sysconfigdir@
abi_ansic=@abi_ansic@
abi_videodrv=@abi_videodrv@
--
1.6.6.1
From 3e2ab9139b12b1239eebcbb6c6a23e7284dd7b44 Mon Sep 17 00:00:00 2001
From: Dan Nicholson <dbn.lists@gmail.com>
Date: Sat, 3 Apr 2010 09:33:51 -0700
Subject: [PATCH 6/6] Move 10-evdev.conf to system config dir $datadir/X11/xorg.conf.d
Since the server searches in a vendor specific path now, we can install
the evdev catchall there without disturbing local administration files.
Signed-off-by: Dan Nicholson <dbn.lists@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit d4dd3d0085f8eaca8c989aaeace1a1a24c5ebf49)
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
config/Makefile.am | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/config/Makefile.am b/config/Makefile.am
index eed7454..675a3b2 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -9,7 +9,7 @@ AM_CFLAGS += $(UDEV_CFLAGS)
libconfig_la_SOURCES += udev.c
libconfig_la_LIBADD = $(UDEV_LIBS)
-xorgconfddir = $(prefix)/etc/X11/$(XF86CONFIGDIR)
+xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR)
xorgconfd_DATA = 10-evdev.conf
else
--
1.6.6.1

View File

@ -1,14 +1,14 @@
From 18e7738eb03f131598e1613ce8bf0bff4ab1ecdf Mon Sep 17 00:00:00 2001
From edf5262c75416c2baf199e3d1c95b43f3e0d0cef Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Wed, 13 Oct 2010 11:16:31 -0400
Subject: [PATCH] qxl v1 fallback
Subject: [PATCH 6/9] qxl v1 fallback
---
hw/xfree86/common/xf86pciBus.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c
index aaacf42..048a410 100644
index 4640ede..a7f0617 100644
--- a/hw/xfree86/common/xf86pciBus.c
+++ b/hw/xfree86/common/xf86pciBus.c
@@ -1141,7 +1141,12 @@ videoPtrToDriverList(struct pci_device *dev,
@ -26,5 +26,5 @@ index aaacf42..048a410 100644
case 0x5333:
switch (dev->device_id)
--
1.7.3.2
1.7.4.4

View File

@ -1,41 +0,0 @@
From beea2378f142556471c62290e275935af848e137 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Mon, 6 Dec 2010 14:33:43 +1000
Subject: [PATCH] xfree86: don't overwrite option list (#32115)
Options set in the configuration file were unconditionally overwritten by
the server. Merge the already existing options and the new options together
instead of just overwriting ones.
Introduced in commit 2199842ed50b3eb40d54146827fc58cae7e873ec
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu Sep 2 10:52:54 2010 +1000
xfree86: remove extraOptions field from IDevRec.
X.Org Bug 32115 <http://bugs.freedesktop.org/show_bug.cgi?id=32115>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
Tested-by: David Ronis <ronis@ronispc.chem.mcgill.ca>
---
hw/xfree86/common/xf86Config.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 5800700..c352f3c 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -1465,7 +1465,8 @@ configInputDevices(XF86ConfLayoutPtr layout, serverLayoutPtr servlayoutp)
free(indp);
return FALSE;
}
- indp[count]->options = irp->iref_option_lst;
+ indp[count]->options = xf86OptionListMerge(indp[count]->options,
+ irp->iref_option_lst);
count++;
irp = (XF86ConfInputrefPtr)irp->list.next;
}
--
1.7.4

View File

@ -1,38 +0,0 @@
From 9db9e964f6ca553dcbd3b7b037745d9581eaa065 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri, 10 Dec 2010 13:23:13 +1000
Subject: [PATCH] xfree86: swap the order to-be-merged lists in xf86CollectInputOptions.
Current order causes the user-configured option list to be overwritten with
the default list supplied by the driver. Swap around so we overwrite the
driver's default values instead.
This only affected options supplied by the driver such as XkbLayout in the
case of evdev.
Reported-by: Sebastian Glita <glseba@yahoo.com>
Reported-by: Simon Thum <simon.thum@gmx.de>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Simon Thum <simon.thum@gmx.de>
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
Tested-by: Sebastian Glita <glseba@yahoo.com>
---
hw/xfree86/common/xf86Option.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/hw/xfree86/common/xf86Option.c b/hw/xfree86/common/xf86Option.c
index d49aa31..16c27e5 100644
--- a/hw/xfree86/common/xf86Option.c
+++ b/hw/xfree86/common/xf86Option.c
@@ -130,7 +130,7 @@ xf86CollectInputOptions(InputInfoPtr pInfo, const char **defaultOpts)
if (defaultOpts) {
XF86OptionPtr tmp =xf86optionListCreate(defaultOpts, -1, 0);
if (pInfo->options)
- pInfo->options = xf86optionListMerge(pInfo->options, tmp);
+ pInfo->options = xf86optionListMerge(tmp, pInfo->options);
else
pInfo->options = tmp;
}
--
1.7.4

View File

@ -1,69 +0,0 @@
From d3499556d8d83396fa2585bd00371a81e086be36 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu, 10 Feb 2011 15:12:14 +1000
Subject: [PATCH] xkb: if the keymap failed to compile, load the default keymap instead.
We really need symbols, compat, keynames, vmods and types for a sensible keymap.
Try this in your xorg.conf.d snippets for all keyboards:
Option "XkbLayout" "us"
Option "XkbVariant" "nodeadkeys"
us(nodeadkeys) doesn't exist so xkbcomp provides everything but the symbols
map. We say we want everything but don't _need_ anything, the server happily
gives us a keymap with every key mapped to NoSymbol. This in turn isn't what
we want after all.
So instead, require symbols, compat, keynames, vmods and types from the
keymap and if that fails, load the default keymap instead. If that fails
too, all bets are off.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
---
xkb/ddxLoad.c | 23 ++++++++++++++++++++++-
1 files changed, 22 insertions(+), 1 deletions(-)
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index b968c43..ac587fc 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -470,13 +470,34 @@ XkbDescPtr
XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
{
XkbDescPtr xkb;
+ unsigned int need;
if (!dev || !rmlvo) {
LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
return NULL;
}
- xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
+ /* These are the components we really really need */
+ need = XkmSymbolsMask | XkmCompatMapMask | XkmTypesMask |
+ XkmKeyNamesMask | XkmVirtualModsMask;
+
+
+ xkb = XkbCompileKeymapForDevice(dev, rmlvo, need);
+
+ if (!xkb) {
+ XkbRMLVOSet dflts;
+
+ /* we didn't get what we really needed. And that will likely leave
+ * us with a keyboard that doesn't work. Use the defaults instead */
+ LogMessage(X_ERROR, "XKB: Failed to load keymap. Loading default "
+ "keymap instead.\n");
+
+ XkbGetRulesDflts(&dflts);
+
+ xkb = XkbCompileKeymapForDevice(dev, &dflts, 0);
+
+ XkbFreeRMLVOSet(&dflts, FALSE);
+ }
return xkb;
}
--
1.7.4

View File

@ -1,95 +0,0 @@
From 47d1d2fed656c3a3b2600491078da90962c46934 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu, 10 Feb 2011 15:11:34 +1000
Subject: [PATCH] xkb: split out keymap compilation.
Refactoring for simpler double-use in the next patch. No functional changes.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
---
xkb/ddxLoad.c | 55 +++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 39 insertions(+), 16 deletions(-)
diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c
index 51b5777..b968c43 100644
--- a/xkb/ddxLoad.c
+++ b/xkb/ddxLoad.c
@@ -425,35 +425,58 @@ XkbRF_RulesPtr rules;
return complete;
}
-XkbDescPtr
-XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
+static Bool
+XkbRMLVOtoKcCGST(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, XkbComponentNamesPtr kccgst)
{
- XkbComponentNamesRec kccgst;
XkbRF_VarDefsRec mlvo;
- XkbDescPtr xkb;
- char name[PATH_MAX];
-
- if (!dev || !rmlvo) {
- LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
- return NULL;
- }
mlvo.model = rmlvo->model;
mlvo.layout = rmlvo->layout;
mlvo.variant = rmlvo->variant;
mlvo.options = rmlvo->options;
- /* XDNFR already logs for us. */
- if (!XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, &kccgst))
+ return XkbDDXNamesFromRules(dev, rmlvo->rules, &mlvo, kccgst);
+}
+
+/**
+ * Compile the given RMLVO keymap and return it. Returns the XkbDescPtr on
+ * success or NULL on failure. If the components compiled are not a superset
+ * or equal to need, the compiliation is treated as failure.
+ */
+static XkbDescPtr
+XkbCompileKeymapForDevice(DeviceIntPtr dev, XkbRMLVOSet *rmlvo, int need)
+{
+ XkbDescPtr xkb;
+ unsigned int provided;
+ XkbComponentNamesRec kccgst;
+ char name[PATH_MAX];
+
+ if (!XkbRMLVOtoKcCGST(dev, rmlvo, &kccgst))
return NULL;
- /* XDLKBN too, but it might return 0 as well as allocating. */
- if (!XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, 0, &xkb, name,
- PATH_MAX)) {
- if (xkb)
+ provided = XkbDDXLoadKeymapByNames(dev, &kccgst, XkmAllIndicesMask, need,
+ &xkb, name, PATH_MAX);
+ if ((need & provided) != need) {
+ if (xkb) {
XkbFreeKeyboard(xkb, 0, TRUE);
+ xkb = NULL;
+ }
+ }
+
+ return xkb;
+}
+
+XkbDescPtr
+XkbCompileKeymap(DeviceIntPtr dev, XkbRMLVOSet *rmlvo)
+{
+ XkbDescPtr xkb;
+
+ if (!dev || !rmlvo) {
+ LogMessage(X_ERROR, "XKB: No device or RMLVO specified\n");
return NULL;
}
+ xkb = XkbCompileKeymapForDevice(dev, rmlvo, 0);
+
return xkb;
}
--
1.7.4

View File

@ -1,79 +0,0 @@
From 4993bd3187f9e5398014ead5c845d2353cc3de6c Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu, 13 Jan 2011 12:20:38 +1000
Subject: [PATCH] xkb: after making changes to the xkb ctrls, copy them back into kbdfeed.
enabled_ctrls_changes nowhere near the usual event or config paths. So this
condition always evaluated to false and the memcpy would thus never been
hit. As a result, any modification to the XKB struct during
XkbUpdateDescActions was not reflected in the kbdfeed ctrls.
The flag that is set by XkbUpdateDescActions() if ctrls were changed are in
enabled_ctrls.
This mainly affected keyboard repeat control as XKB uses the kbdfeed ctrls,
not XKB's per_key_repeats, to determine if a key needs to be repeated. Thus,
adding a "repeat= False" to the XKB map of any action did not have any
effect.
Test case:
assign Mode_switch to any key that by default repeats, e.g. the menu key.
key <COMP> { [ Mode_switch ] };
Then modify the Mode_switch action to not repeat the key.
interpret Mode_switch+AnyOfOrNone(all) {
virtualModifier= AltGr;
useModMapMods=level1;
action= SetGroup(group=+1);
// Add this line
repeat= False;
};
Though the flags are correctly reflected in the description loaded in the
server, the change is not handed back to the kbdfeed struct and XKB will
trigger softrepeats of this key.
This patch also adds two explanatory comments and an extra check, as this
path may be hit before the CtrlProc for the kbdfeed struct is set.
Red Hat Bug 537708 <https://bugzilla.redhat.com/show_bug.cgi?id=537708>
Also fixes broken auto-repeat of the backspace key in the colemak layout
(mapped to CapsLock).
X.Org Bug 16318 <http://bugs.freedesktop.org/show_bug.cgi?id=16318>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
---
xkb/xkbUtils.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/xkb/xkbUtils.c b/xkb/xkbUtils.c
index 14dc784..23fe57e 100644
--- a/xkb/xkbUtils.c
+++ b/xkb/xkbUtils.c
@@ -342,15 +342,18 @@ CARD8 * repeat;
xkb= xkbi->desc;
repeat= xkb->ctrls->per_key_repeat;
+ /* before letting XKB do any changes, copy the current core values */
if (pXDev->kbdfeed)
memcpy(repeat,pXDev->kbdfeed->ctrl.autoRepeats,XkbPerKeyBitArraySize);
XkbUpdateDescActions(xkb,first,num,changes);
if ((pXDev->kbdfeed)&&
- (changes->ctrls.enabled_ctrls_changes&XkbPerKeyRepeatMask)) {
+ (changes->ctrls.changed_ctrls&XkbPerKeyRepeatMask)) {
+ /* now copy the modified changes back to core */
memcpy(pXDev->kbdfeed->ctrl.autoRepeats,repeat, XkbPerKeyBitArraySize);
- (*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
+ if (pXDev->kbdfeed->CtrlProc)
+ (*pXDev->kbdfeed->CtrlProc)(pXDev, &pXDev->kbdfeed->ctrl);
}
return;
}
--
1.7.3.4