[gtk+/gtk-3-22] gdkseatdefault: Grab touch events where applicable
- From: Daniel Boles <dboles src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-22] gdkseatdefault: Grab touch events where applicable
- Date: Wed, 20 Sep 2017 18:50:22 +0000 (UTC)
commit 5c700cf575a341482d802edce999789feb17849a
Author: Daniel Boles <dboles src gnome org>
Date: Tue Sep 5 15:44:00 2017 +0100
gdkseatdefault: Grab touch events where applicable
gdk_seat_default_grab() grabs POINTER_EVENTS if the capability is
GDK_SEAT_CAPABILITY_ALL_POINTING. But that enumerator is a union that
includes GDK_SEAT_CAPABILITY_TOUCH, but we never grabbed TOUCH_EVENTS,
an unused macro that was presumably created with this purpose in mind.
So, check which of the ALL_POINTING capabilities we have, and set the
right mask of POINTER_EVENTS and/or TOUCH_EVENTS as required.
As part of this, explicitly let TABLET_STYLUS take over pointer events,
as this is the intended behaviour and was the effective result before.
This should fix touch events being lost in migrating from Device.grab()
to Seat.grab(GDK_SEAT_CAPABILITY_ALL_POINTING), as found by Inkscape.
https://bugzilla.gnome.org/show_bug.cgi?id=781757
gdk/gdkseatdefault.c | 15 ++++++++++++++-
1 files changed, 14 insertions(+), 1 deletions(-)
---
diff --git a/gdk/gdkseatdefault.c b/gdk/gdkseatdefault.c
index dc3f288..91a42cd 100644
--- a/gdk/gdkseatdefault.c
+++ b/gdk/gdkseatdefault.c
@@ -132,9 +132,22 @@ gdk_seat_default_grab (GdkSeat *seat,
if (capabilities & GDK_SEAT_CAPABILITY_ALL_POINTING)
{
+ /* ALL_POINTING spans 3 capabilities; get the mask for the ones we have */
+ GdkEventMask pointer_evmask = 0;
+
+ /* We let tablet styli take over the pointer cursor */
+ if (capabilities & (GDK_SEAT_CAPABILITY_POINTER |
+ GDK_SEAT_CAPABILITY_TABLET_STYLUS))
+ {
+ pointer_evmask |= POINTER_EVENTS;
+ }
+
+ if (capabilities & GDK_SEAT_CAPABILITY_TOUCH)
+ pointer_evmask |= TOUCH_EVENTS;
+
status = gdk_device_grab (priv->master_pointer, window,
GDK_OWNERSHIP_NONE, owner_events,
- POINTER_EVENTS, cursor,
+ pointer_evmask, cursor,
evtime);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]