[gtk+] wayland: unset sequence if the xdg surface is moved/resized through touch
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] wayland: unset sequence if the xdg surface is moved/resized through touch
- Date: Tue, 26 Aug 2014 11:45:55 +0000 (UTC)
commit 29d9b2f7cfec936b3a923797acaf1e6e23a2d908
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Aug 20 20:23:58 2014 +0200
wayland: unset sequence if the xdg surface is moved/resized through touch
The latest implicit grab serial is used in order to start the compositor
grab, If it belongs to a touch event, remove that touch sequence, as the
rest of the sequence will be gone for good.
This avoids stale sequences (and implicit grab info) after a window is
moved/resized.
https://bugzilla.gnome.org/show_bug.cgi?id=731380
gdk/wayland/gdkwindow-wayland.c | 25 ++++++++++++++++---------
1 files changed, 16 insertions(+), 9 deletions(-)
---
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index 35062f3..6875099 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -1760,10 +1760,8 @@ gdk_wayland_window_begin_resize_drag (GdkWindow *window,
guint32 timestamp)
{
GdkWindowImplWayland *impl;
- GdkWaylandDisplay *wayland_display =
- GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
-
- uint32_t resize_edges;
+ GdkEventSequence *sequence;
+ uint32_t resize_edges, serial;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
@@ -1813,10 +1811,15 @@ gdk_wayland_window_begin_resize_drag (GdkWindow *window,
if (!impl->xdg_surface)
return;
+ serial = _gdk_wayland_device_get_last_implicit_grab_serial (GDK_WAYLAND_DEVICE (device),
+ &sequence);
+
xdg_surface_resize (impl->xdg_surface,
gdk_wayland_device_get_wl_seat (device),
- _gdk_wayland_display_get_serial (wayland_display),
- resize_edges);
+ serial, resize_edges);
+
+ if (sequence)
+ gdk_wayland_device_unset_touch_grab (device, sequence);
/* This is needed since Wayland will absorb all the pointer events after the
* above function - FIXME: Is this always safe..?
@@ -1833,8 +1836,8 @@ gdk_wayland_window_begin_move_drag (GdkWindow *window,
guint32 timestamp)
{
GdkWindowImplWayland *impl;
- GdkWaylandDisplay *wayland_display =
- GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
+ GdkEventSequence *sequence;
+ uint32_t serial;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL (window))
@@ -1845,9 +1848,13 @@ gdk_wayland_window_begin_move_drag (GdkWindow *window,
if (!impl->xdg_surface)
return;
+ serial = _gdk_wayland_device_get_last_implicit_grab_serial (GDK_WAYLAND_DEVICE (device),
+ &sequence);
xdg_surface_move (impl->xdg_surface,
gdk_wayland_device_get_wl_seat (device),
- _gdk_wayland_display_get_serial (wayland_display));
+ serial);
+ if (sequence)
+ gdk_wayland_device_unset_touch_grab (device, sequence);
/* This is needed since Wayland will absorb all the pointer events after the
* above function - FIXME: Is this always safe..?
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]