[mutter/wip/carlosg/check-selection-request-focus: 3/3] wayland: Check focus surface client in wl_data_device.set_selection()
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/check-selection-request-focus: 3/3] wayland: Check focus surface client in wl_data_device.set_selection()
- Date: Wed, 23 Oct 2019 11:24:04 +0000 (UTC)
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]