[mutter/gnome-3-34] wayland: Rely on MetaSelection::owner-changed for .selection event emission
- From: Robert Mader <rmader src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-34] wayland: Rely on MetaSelection::owner-changed for .selection event emission
- Date: Sun, 19 Apr 2020 20:02:27 +0000 (UTC)
commit 7fbba4ad14129f2536f8599c24c48c5888798c95
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Apr 16 23:45:31 2020 +0200
wayland: Rely on MetaSelection::owner-changed for .selection event emission
We already have a signal callback that translates selection ownership changes to
data_device/primary .selection events. Given both will be run when a data source
is being replaced, and this event emission being deleted is kinda short sighted
in that in only knows about Wayland, rely entirely on MetaSelection::owner-changed
emission.
Fixes spurious .selection(null) events being sent when a compositor-local source
takes over the selection without the focus changing (eg. screenshot to clipboard).
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1160
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1204
(cherry picked from commit 1363246d4452c0eebf404f2668df9931d06eae92)
src/wayland/meta-wayland-data-device.c | 53 ----------------------------------
1 file changed, 53 deletions(-)
---
diff --git a/src/wayland/meta-wayland-data-device.c b/src/wayland/meta-wayland-data-device.c
index a68ab450f..e3d0772b2 100644
--- a/src/wayland/meta-wayland-data-device.c
+++ b/src/wayland/meta-wayland-data-device.c
@@ -1331,20 +1331,8 @@ static void
selection_data_source_destroyed (gpointer data, GObject *object_was_here)
{
MetaWaylandDataDevice *data_device = data;
- MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
- struct wl_resource *data_device_resource;
- struct wl_client *focus_client = NULL;
data_device->selection_data_source = NULL;
-
- 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);
- if (data_device_resource)
- wl_data_device_send_selection (data_device_resource, NULL);
- }
-
unset_selection_source (data_device, META_SELECTION_CLIPBOARD);
}
@@ -1646,8 +1634,6 @@ meta_wayland_data_device_set_selection (MetaWaylandDataDevice *data_device,
guint32 serial)
{
MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
- struct wl_resource *data_device_resource;
- struct wl_client *focus_client;
MetaSelectionSource *selection_source;
if (data_device->selection_data_source &&
@@ -1682,18 +1668,6 @@ meta_wayland_data_device_set_selection (MetaWaylandDataDevice *data_device,
set_selection_source (data_device, META_SELECTION_CLIPBOARD,
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);
- if (data_device_resource)
- {
- struct wl_resource *offer;
- offer = create_and_send_clipboard_offer (data_device, data_device_resource);
- wl_data_device_send_selection (data_device_resource, offer);
- }
- }
}
static void
@@ -1744,21 +1718,8 @@ primary_source_destroyed (gpointer data,
GObject *object_was_here)
{
MetaWaylandDataDevice *data_device = data;
- MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
- struct wl_client *focus_client = NULL;
data_device->primary_data_source = NULL;
-
- focus_client = meta_wayland_keyboard_get_focus_client (seat->keyboard);
- if (focus_client)
- {
- struct wl_resource *data_device_resource;
-
- data_device_resource = wl_resource_find_for_client (&data_device->primary_resource_list, focus_client);
- if (data_device_resource)
- gtk_primary_selection_device_send_selection (data_device_resource, NULL);
- }
-
unset_selection_source (data_device, META_SELECTION_PRIMARY);
}
@@ -1768,8 +1729,6 @@ meta_wayland_data_device_set_primary (MetaWaylandDataDevice *data_device,
guint32 serial)
{
MetaWaylandSeat *seat = wl_container_of (data_device, seat, data_device);
- struct wl_resource *data_device_resource;
- struct wl_client *focus_client;
MetaSelectionSource *selection_source;
g_assert (!source || META_IS_WAYLAND_DATA_SOURCE_PRIMARY (source));
@@ -1805,18 +1764,6 @@ meta_wayland_data_device_set_primary (MetaWaylandDataDevice *data_device,
set_selection_source (data_device, META_SELECTION_PRIMARY,
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->primary_resource_list, focus_client);
- if (data_device_resource)
- {
- struct wl_resource *offer;
- offer = create_and_send_primary_offer (data_device, data_device_resource);
- gtk_primary_selection_device_send_selection (data_device_resource, offer);
- }
- }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]