summaryrefslogtreecommitdiff
path: root/xkb/xkbEvents.c
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2007-03-08 17:17:23 +1030
committerPeter Hutterer <peter@cs.unisa.edu.au>2007-03-08 17:17:23 +1030
commitceca5670fee99b5feceaa2453f1ac32d1bfe7dcd (patch)
tree61b135c3d494c4588cacbcd05329032da92ef82f /xkb/xkbEvents.c
parent537bc2ead4d154552cbdc3a19e335f82af63792c (diff)
dix: Each device needs to differ between a core grab and an XI grab,
otherwise a Xi grab may overwrite or release a core grab. Replace grab and associates with coreGrab and deviceGrab structures, adjust rest of dix/Xi/etc to compile. xfree86: Don't check for core devices, we'll have the virtual ones anyway. If we check, the first mouse device is duplicated and sends double events.
Diffstat (limited to 'xkb/xkbEvents.c')
-rw-r--r--xkb/xkbEvents.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c
index 139221f3f..eeb9dec7c 100644
--- a/xkb/xkbEvents.c
+++ b/xkb/xkbEvents.c
@@ -808,6 +808,7 @@ XkbFilterEvents(ClientPtr pClient,int nEvents,xEvent *xE)
int i, button_mask;
DeviceIntPtr pXDev = (DeviceIntPtr)LookupKeyboardDevice();
XkbSrvInfoPtr xkbi;
+GrabInfoPtr grabinfo;
xkbi= pXDev->key->xkbInfo;
if ( pClient->xkbClientFlags & _XkbClientInitialized ) {
@@ -831,7 +832,9 @@ XkbSrvInfoPtr xkbi;
(_XkbIsReleaseEvent(xE[0].u.u.type)) ) {
return False;
}
- if ((pXDev->grab != NullGrab) && pXDev->fromPassiveGrab &&
+ /* just coreGrab is fine, pXDev is inputInfo.keyboard (see above) */
+ if ((pXDev->coreGrab.grab != NullGrab)
+ && pXDev->coreGrab.fromPassiveGrab &&
((xE[0].u.u.type==KeyPress)||(xE[0].u.u.type==KeyRelease))) {
register unsigned state,flags;