aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/dix/events.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2010-03-22 09:17:19 +0000
committermarha <marha@users.sourceforge.net>2010-03-22 09:17:19 +0000
commit348130c450be8b5c4abcb03272b326434e3f5022 (patch)
tree413685260aa63ea6b530af4898603a40f441b768 /xorg-server/dix/events.c
parent4f736752bbdf3bbf1a6325af7ad470198aa5a82a (diff)
downloadvcxsrv-348130c450be8b5c4abcb03272b326434e3f5022.tar.gz
vcxsrv-348130c450be8b5c4abcb03272b326434e3f5022.tar.bz2
vcxsrv-348130c450be8b5c4abcb03272b326434e3f5022.zip
Updated to xorg-server-1.7.99.902
Diffstat (limited to 'xorg-server/dix/events.c')
-rw-r--r--xorg-server/dix/events.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c
index 0e9bc3131..654165251 100644
--- a/xorg-server/dix/events.c
+++ b/xorg-server/dix/events.c
@@ -3552,6 +3552,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);
@@ -3573,6 +3575,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);
@@ -3584,6 +3604,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);