wayland: Set the master device on the drop-side GdkDragContext
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 26 Jun 2015 12:23:16 +0000 (14:23 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 26 Jun 2015 12:35:41 +0000 (14:35 +0200)
And force the ungrab on it, instead of the slave, in the case of
local DnD drop. This avoids confusions on the pointer events spawn
from DnD, as GDK doesn't think anymore those are from a slave device.
Most namely, it fixes the stuck grab when finishing DnD on the
same app it was started from.

gdk/wayland/gdkdevice-wayland.c

index 1e17c774875e4cb9f5195d0ba4b2f1e6f5bbbc71..d16c92f61745c723df61d70b1f8aaa1a67c249ba 100644 (file)
@@ -800,7 +800,7 @@ data_device_drop (void                  *data,
   local_dnd_owner = gdk_selection_owner_get_for_display (device->display, gdk_drag_get_selection (device->drop_context));
 
   if (local_dnd_owner)
-    gdk_wayland_device_unset_grab (device->pointer);
+    gdk_wayland_device_unset_grab (device->master_pointer);
 
   _gdk_wayland_drag_context_emit_event (device->drop_context,
                                         GDK_DROP_START, GDK_CURRENT_TIME);
@@ -1712,7 +1712,7 @@ seat_handle_capabilities (void                    *data,
       device_manager->devices =
         g_list_prepend (device_manager->devices, device->pointer);
 
-      device->drop_context = _gdk_wayland_drop_context_new (device->pointer,
+      device->drop_context = _gdk_wayland_drop_context_new (device->master_pointer,
                                                             device->data_device);
 
       g_signal_emit_by_name (device_manager, "device-added", device->pointer);