xserver: Branch 'mpx' - 2 commits

Peter Hutterer whot at kemper.freedesktop.org
Thu Jun 21 01:57:52 PDT 2007


 include/xkbsrv.h |    3 ++-
 xkb/xkbActions.c |   18 ++++++++++--------
 2 files changed, 12 insertions(+), 9 deletions(-)

New commits:
diff-tree 4d5df14f2c4a3108a8c8adfcf4766c0d1a9daad2 (from f6f3322fc7562dbfccaf798b05d42ea222860ba8)
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Thu Jun 21 18:24:30 2007 +0930

    Save processInputProc before wrapping it and restore it later, instead of
    using a hardcoded ProcessKeyboardEvent. Otherwise we lose the ability to
    process DeviceKeyEvents after the first key press.
    
    This should be the correct fix now.

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 5edee53..e018749 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -241,7 +241,8 @@ typedef struct
 	oldprocs->unwrapProc = device->unwrapProc; \
 	device->unwrapProc = unwrapproc;
 
-#define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs) \
+#define UNWRAP_PROCESS_INPUT_PROC(device, oldprocs, backupproc) \
+        backupproc = device->public.processInputProc; \
 	device->public.processInputProc = oldprocs->processInputProc; \
 	device->public.realInputProc = oldprocs->realInputProc; \
 	device->unwrapProc = oldprocs->unwrapProc;
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 4c3efe2..252c653 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -49,10 +49,11 @@ xkbUnwrapProc(DeviceIntPtr device, Devic
 {
     xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(device);
     ProcessInputProc tmp = device->public.processInputProc;
+    ProcessInputProc dummy; /* unused, but neede for macro */
     if(xkbPrivPtr->unwrapProc)
 	xkbPrivPtr->unwrapProc = NULL;
 
-    UNWRAP_PROCESS_INPUT_PROC(device,xkbPrivPtr);
+    UNWRAP_PROCESS_INPUT_PROC(device,xkbPrivPtr, dummy);
     proc(device,data);
     WRAP_PROCESS_INPUT_PROC(device,xkbPrivPtr,
 			    tmp,xkbUnwrapProc);
@@ -867,6 +868,7 @@ int		x,y;
 XkbStateRec	old;
 unsigned	mods,mask,oldCoreState = 0,oldCorePrevState = 0;
 xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(xkbi->device);
+ProcessInputProc backupproc;
 
     /* never actually used uninitialised, but gcc isn't smart enough
      * to work that out. */
@@ -919,10 +921,10 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEI
 
 	realMods = xkbi->device->key->modifierMap[ev.u.u.detail];
 	xkbi->device->key->modifierMap[ev.u.u.detail] = 0;
-	UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr);
+	UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr, backupproc);
 	xkbi->device->public.processInputProc(&ev,xkbi->device,1);
 	COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr,
-				     ProcessKeyboardEvent,xkbUnwrapProc);
+				     backupproc,xkbUnwrapProc);
 	xkbi->device->key->modifierMap[ev.u.u.detail] = realMods;
 	
 	if ( mask || mods ) {
@@ -960,10 +962,10 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEI
 
 	realMods = xkbi->device->key->modifierMap[ev.u.u.detail];
 	xkbi->device->key->modifierMap[ev.u.u.detail] = 0;
-	UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr);
+	UNWRAP_PROCESS_INPUT_PROC(xkbi->device,xkbPrivPtr, backupproc);
 	xkbi->device->public.processInputProc(&ev,xkbi->device,1);
 	COND_WRAP_PROCESS_INPUT_PROC(xkbi->device, xkbPrivPtr,
-				     ProcessKeyboardEvent,xkbUnwrapProc);
+				     backupproc,xkbUnwrapProc);
 	xkbi->device->key->modifierMap[ev.u.u.detail] = realMods;
 
 	if ( mask || mods ) {
@@ -1155,6 +1157,7 @@ Bool		pressEvent;
 #ifdef XINPUT
 Bool		xiEvent;
 #endif
+ProcessInputProc backupproc;
     
 xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEINFO(dev);
 
@@ -1297,10 +1300,10 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEI
 	if (keyEvent) {
 	    realMods = keyc->modifierMap[key];
 	    keyc->modifierMap[key] = 0;
-	    UNWRAP_PROCESS_INPUT_PROC(dev,xkbPrivPtr);
+	    UNWRAP_PROCESS_INPUT_PROC(dev,xkbPrivPtr, backupproc);
 	    dev->public.processInputProc(xE,dev,count);
 	    COND_WRAP_PROCESS_INPUT_PROC(dev, xkbPrivPtr,
-					 ProcessKeyboardEvent,xkbUnwrapProc);
+					 backupproc,xkbUnwrapProc);
 	    keyc->modifierMap[key] = realMods;
 	}
 	else CoreProcessPointerEvent(xE,dev,count);
diff-tree f6f3322fc7562dbfccaf798b05d42ea222860ba8 (from 8431f6083076cf1e701366767d8f8d32a628200f)
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Thu Jun 21 18:16:21 2007 +0930

    Revert "Save processInputProc before wrapping it and restore it later, instead of"
    Mixed up source trees, this was a very bad fix.
    
    This reverts commit 8431f6083076cf1e701366767d8f8d32a628200f.

diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 156fb26..4c3efe2 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -1300,8 +1300,7 @@ xkbDeviceInfoPtr xkbPrivPtr = XKBDEVICEI
 	    UNWRAP_PROCESS_INPUT_PROC(dev,xkbPrivPtr);
 	    dev->public.processInputProc(xE,dev,count);
 	    COND_WRAP_PROCESS_INPUT_PROC(dev, xkbPrivPtr,
-                (dev == inputInfo.keyboard) ?  ProcessKeyboardEvent : ProcessOtherEvent, 
-                xkbUnwrapProc);
+					 ProcessKeyboardEvent,xkbUnwrapProc);
 	    keyc->modifierMap[key] = realMods;
 	}
 	else CoreProcessPointerEvent(xE,dev,count);


More information about the xorg-commit mailing list