xserver: Branch 'master' - 2 commits
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Nov 12 02:58:20 UTC 2018
Xi/exevents.c | 21 ++++++++-------------
dix/events.c | 2 +-
2 files changed, 9 insertions(+), 14 deletions(-)
New commits:
commit 2118e4471be037f2e642f35ff0494aa09177c9ee
Author: Marco Trevisan (Treviño) <mail at 3v1n0.net>
Date: Sat Oct 27 03:54:09 2018 +0200
dix/events: reuse grab pointer value
diff --git a/dix/events.c b/dix/events.c
index d3a33ea3f..b12d731dd 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1573,7 +1573,7 @@ DeactivatePointerGrab(DeviceIntPtr mouse)
emulate a ButtonRelease here. So pretend the listener
already has the end event */
if (grab->grabtype == CORE || grab->grabtype == XI ||
- !xi2mask_isset(mouse->deviceGrab.grab->xi2mask, mouse, XI_TouchBegin)) {
+ !xi2mask_isset(grab->xi2mask, mouse, XI_TouchBegin)) {
mode = XIAcceptTouch;
/* NOTE: we set the state here, but
* ProcessTouchOwnershipEvent() will still call
commit 35e5a76cc1d02801fadd49d12e60664b02e4bebc
Author: Marco Trevisan (Treviño) <mail at 3v1n0.net>
Date: Fri Oct 26 19:52:49 2018 +0200
Xi: Use current device active grab to deliver touch events if any
When Retrieving touch delivery data we need to check if we have an active
grab on such device, and in that case use it to delivery events.
If we don't do this, when rejecting the touch events in DeactivatePointerGrab,
we will end-up in creating an implicit grab that will change the device
deviceGrab's state, causing a recursion during TouchEndTouch.
Fixes #7
https://bugs.freedesktop.org/show_bug.cgi?id=96536
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 17d751e31..659816a46 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1293,14 +1293,21 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
int rc;
InputClients *iclients = NULL;
*mask = NULL;
+ *grab = NULL;
if (listener->type == LISTENER_GRAB ||
listener->type == LISTENER_POINTER_GRAB) {
-
*grab = listener->grab;
BUG_RETURN_VAL(!*grab, FALSE);
+ }
+ else if (ti->emulate_pointer && dev->deviceGrab.grab &&
+ !dev->deviceGrab.fromPassiveGrab) {
+ /* There may be an active pointer grab on the device */
+ *grab = dev->deviceGrab.grab;
+ }
+ if (*grab) {
*client = rClient(*grab);
*win = (*grab)->window;
*mask = (*grab)->xi2mask;
@@ -1357,8 +1364,6 @@ RetrieveTouchDeliveryData(DeviceIntPtr dev, TouchPointInfoPtr ti,
/* if owner selected, oclients is NULL */
*client = oclients ? rClient(oclients) : wClient(*win);
}
-
- *grab = NULL;
}
return TRUE;
@@ -1498,16 +1503,6 @@ DeliverEmulatedMotionEvent(DeviceIntPtr dev, TouchPointInfoPtr ti,
&mask))
return;
- /* There may be a pointer grab on the device */
- if (!grab) {
- grab = dev->deviceGrab.grab;
- if (grab) {
- win = grab->window;
- mask = grab->xi2mask;
- client = rClient(grab);
- }
- }
-
DeliverTouchEmulatedEvent(dev, ti, (InternalEvent*)&motion, &ti->listeners[0], client,
win, grab, mask);
}
More information about the xorg-commit
mailing list