[mutter/wip/carlosg/check-selection-request-focus: 3/3] wayland: Check focus surface client in wl_data_device.set_selection()



commit a693d106fc34fe37bb467d69b8e46af33fd9746b
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Oct 23 13:19:39 2019 +0200

    wayland: Check focus surface client in wl_data_device.set_selection()
    
    Similar to our handling in set_primary(), ignore set_selection() requests
    that come from unfocused clients.
    
    https://gitlab.gnome.org/GNOME/mutter/issues/878

 src/wayland/meta-wayland-data-device.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
---
diff --git a/src/wayland/meta-wayland-data-device.c b/src/wayland/meta-wayland-data-device.c
index 34ffd7ca0..9f6eca4d5 100644
--- a/src/wayland/meta-wayland-data-device.c
+++ b/src/wayland/meta-wayland-data-device.c
@@ -1610,9 +1610,16 @@ meta_wayland_data_device_set_selection (MetaWaylandDataDevice *data_device,
 {
   MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
   struct wl_resource *data_device_resource;
+  struct wl_resource *source_resource;
   struct wl_client *focus_client;
   MetaSelectionSource *selection_source;
 
+  focus_client = meta_wayland_keyboard_get_focus_client (seat->keyboard);
+  source_resource = meta_wayland_data_source_get_resource (source);
+
+  if (wl_resource_get_client (source_resource) != focus_client)
+    return;
+
   if (data_device->selection_data_source &&
       data_device->selection_serial - serial < UINT32_MAX / 2)
     return;
@@ -1647,7 +1654,6 @@ meta_wayland_data_device_set_selection (MetaWaylandDataDevice *data_device,
                         selection_source);
   g_object_unref (selection_source);
 
-  focus_client = meta_wayland_keyboard_get_focus_client (seat->keyboard);
   if (focus_client)
     {
       data_device_resource = wl_resource_find_for_client (&data_device->resource_list, focus_client);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]