X-Git-Url: http://git.draconx.ca/gitweb/gentoo-draconx.git/blobdiff_plain/8c99408cadc8eb0a9f461d7c120734555c47df75..ce2a51840197f6d9510ce4ecf32feff597c09be7:/x11-base/xorg-server/files/1.7.3.901-0001-dix-if-owner-events-is-true-for-passive-grabs-add-th.patch?ds=sidebyside diff --git a/x11-base/xorg-server/files/1.7.3.901-0001-dix-if-owner-events-is-true-for-passive-grabs-add-th.patch b/x11-base/xorg-server/files/1.7.3.901-0001-dix-if-owner-events-is-true-for-passive-grabs-add-th.patch new file mode 100644 index 0000000..82f4f50 --- /dev/null +++ b/x11-base/xorg-server/files/1.7.3.901-0001-dix-if-owner-events-is-true-for-passive-grabs-add-th.patch @@ -0,0 +1,83 @@ +From 873ef3430e92b0756c0dbe5033f6aec38a20d6ad Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Wed, 16 Dec 2009 13:43:22 +1000 +Subject: [PATCH] dix: if owner-events is true for passive grabs, add the window mask (#25400) + +A client requesting a GrabModeSync button grab, owner-events true, with only +the ButtonRelease mask set would never receive the press event even if the +grab window had the ButtonPress mask set. + +The protocol requires that if owner-events is true, then the delivery mask +is the combination of the grab mask + the window event mask. + +X.Org Bug 25400 + +Signed-off-by: Peter Hutterer +--- + dix/events.c | 36 ++++++++++++++++++++++++++++++++++++ + 1 files changed, 36 insertions(+), 0 deletions(-) + +diff --git a/dix/events.c b/dix/events.c +index 7e0867c..12b12a8 100644 +--- a/dix/events.c ++++ b/dix/events.c +@@ -3590,6 +3590,8 @@ CheckPassiveGrabsOnWindow( + xE = &core; + count = 1; + mask = grab->eventMask; ++ if (grab->ownerEvents) ++ mask |= pWin->eventMask; + } else if (match & XI2_MATCH) + { + rc = EventToXI2((InternalEvent*)event, &xE); +@@ -3611,6 +3613,24 @@ CheckPassiveGrabsOnWindow( + mask = grab->xi2mask[device->id][((xGenericEvent*)xE)->evtype/8]; + else if (event->type == XI_Enter || event->type == XI_FocusIn) + mask = grab->xi2mask[device->id][event->type/8]; ++ ++ if (grab->ownerEvents && wOtherInputMasks(grab->window)) ++ { ++ InputClientsPtr icp = ++ wOtherInputMasks(grab->window)->inputClients; ++ ++ while(icp) ++ { ++ if (rClient(icp) == rClient(grab)) ++ { ++ int evtype = (xE) ? ((xGenericEvent*)xE)->evtype : event->type; ++ mask |= icp->xi2mask[device->id][evtype/8]; ++ break; ++ } ++ ++ icp = icp->next; ++ } ++ } + } else + { + rc = EventToXI((InternalEvent*)event, &xE, &count); +@@ -3622,6 +3642,22 @@ CheckPassiveGrabsOnWindow( + continue; + } + mask = grab->eventMask; ++ if (grab->ownerEvents && wOtherInputMasks(grab->window)) ++ { ++ InputClientsPtr icp = ++ wOtherInputMasks(grab->window)->inputClients; ++ ++ while(icp) ++ { ++ if (rClient(icp) == rClient(grab)) ++ { ++ mask |= icp->mask[device->id]; ++ break; ++ } ++ ++ icp = icp->next; ++ } ++ } + } + + (*grabinfo->ActivateGrab)(device, grab, currentTime, TRUE); +-- +1.6.5.2 +