rebase all patches
xserver-1.10-vbe-malloc.patch: drop, d8caa782009abf4d "git rm" all unused patches
This commit is contained in:
parent
de81d9548c
commit
4c175ee402
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user