diff options
author | Adam Williamson <awilliam@redhat.com> | 2019-10-21 15:55:38 -0700 |
---|---|---|
committer | Adam Williamson <awilliam@redhat.com> | 2019-10-21 15:55:38 -0700 |
commit | 9c20882d3bd71be65b8222d86455232f4e74ceb5 (patch) | |
tree | d5eaf030a0059c754eb1da9391285ee60369a3ed | |
parent | Update to 3.24.12 (diff) | |
download | gtk3-classic-build-gtk3-9c20882d3bd71be65b8222d86455232f4e74ceb5.tar.gz gtk3-classic-build-gtk3-9c20882d3bd71be65b8222d86455232f4e74ceb5.tar.bz2 gtk3-classic-build-gtk3-9c20882d3bd71be65b8222d86455232f4e74ceb5.zip |
Backport PR #1142 to try and fix intermittent copy/cut failures
-rw-r--r-- | 1142.patch | 112 | ||||
-rw-r--r-- | gtk3.spec | 10 |
2 files changed, 121 insertions, 1 deletions
diff --git a/1142.patch b/1142.patch new file mode 100644 index 0000000..13b24fe --- /dev/null +++ b/1142.patch @@ -0,0 +1,112 @@ +From 299902b008c3b453596679f249eec28bfc6c026a Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho <carlosg@gnome.org> +Date: Mon, 21 Oct 2019 20:19:06 +0200 +Subject: [PATCH 1/2] gdk: Shuffle the situations where a selection is unset + +This should only be explicitly unset (face to the windowing) on +gdk_selection_owner_set() with a NULL window. Other circumstances +(eg. selection being taken over by another client) should just +trigger the SelectionClear event in GDK internally. + +Related: https://gitlab.gnome.org/GNOME/mutter/issues/878 +--- + gdk/wayland/gdkselection-wayland.c | 19 +++++++++---------- + 1 file changed, 9 insertions(+), 10 deletions(-) + +diff --git a/gdk/wayland/gdkselection-wayland.c b/gdk/wayland/gdkselection-wayland.c +index cb799e53e0..9494489d69 100644 +--- a/gdk/wayland/gdkselection-wayland.c ++++ b/gdk/wayland/gdkselection-wayland.c +@@ -1140,10 +1140,6 @@ gdk_wayland_selection_unset_data_source (GdkDisplay *display, + + if (selection == atoms[ATOM_CLIPBOARD]) + { +- GdkSeat *seat = gdk_display_get_default_seat (display); +- +- gdk_wayland_seat_set_selection (seat, NULL); +- + if (wayland_selection->clipboard_source) + { + wl_data_source_destroy (wayland_selection->clipboard_source); +@@ -1152,10 +1148,6 @@ gdk_wayland_selection_unset_data_source (GdkDisplay *display, + } + else if (selection == atoms[ATOM_PRIMARY]) + { +- GdkSeat *seat = gdk_display_get_default_seat (display); +- +- gdk_wayland_seat_set_primary (seat, NULL); +- + if (wayland_selection->primary_source) + { + gtk_primary_selection_source_destroy (wayland_selection->primary_source); +@@ -1192,19 +1184,26 @@ _gdk_wayland_display_set_selection_owner (GdkDisplay *display, + gboolean send_event) + { + GdkWaylandSelection *wayland_selection = gdk_wayland_display_get_selection (display); ++ GdkSeat *seat = gdk_display_get_default_seat (display); + + if (selection == atoms[ATOM_CLIPBOARD]) + { + wayland_selection->clipboard_owner = owner; + if (send_event && !owner) +- gdk_wayland_selection_unset_data_source (display, selection); ++ { ++ gdk_wayland_seat_set_selection (seat, NULL); ++ gdk_wayland_selection_unset_data_source (display, selection); ++ } + return TRUE; + } + else if (selection == atoms[ATOM_PRIMARY]) + { + wayland_selection->primary_owner = owner; + if (send_event && !owner) +- gdk_wayland_selection_unset_data_source (display, selection); ++ { ++ gdk_wayland_seat_set_primary (seat, NULL); ++ gdk_wayland_selection_unset_data_source (display, selection); ++ } + return TRUE; + } + else if (selection == atoms[ATOM_DND]) +-- +2.22.0 + + +From 7a891eeb6def29f6562a3833c272b0cb2a67ae23 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho <carlosg@gnome.org> +Date: Mon, 21 Oct 2019 20:27:12 +0200 +Subject: [PATCH 2/2] gdk: Do not call gdk_selection_owner_set() internally to + the backend + +This should just be called by the upper layers (and result in +wl_data_device.set_selection, etc). We should not trigger this within +the backend otherwise. + +Related: https://gitlab.gnome.org/GNOME/mutter/issues/878 +--- + gdk/wayland/gdkselection-wayland.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/gdk/wayland/gdkselection-wayland.c b/gdk/wayland/gdkselection-wayland.c +index 9494489d69..e14f50de8d 100644 +--- a/gdk/wayland/gdkselection-wayland.c ++++ b/gdk/wayland/gdkselection-wayland.c +@@ -937,7 +937,6 @@ data_source_cancelled (void *data, + gdk_drag_context_cancel (context, GDK_DRAG_CANCEL_ERROR); + + emit_selection_clear (display, atom); +- gdk_selection_owner_set (NULL, atom, GDK_CURRENT_TIME, TRUE); + gdk_wayland_selection_unset_data_source (display, atom); + } + +@@ -1048,7 +1047,6 @@ primary_source_cancelled (void *data, + + atom = atoms[ATOM_PRIMARY]; + emit_selection_clear (display, atom); +- gdk_selection_owner_set (NULL, atom, GDK_CURRENT_TIME, TRUE); + gdk_wayland_selection_unset_data_source (display, atom); + } + +-- +2.22.0 + @@ -25,12 +25,17 @@ Name: gtk3 Version: 3.24.12 -Release: 1%{?dist} +Release: 2%{?dist} Summary: GTK+ graphical user interface library License: LGPLv2+ URL: http://www.gtk.org Source0: http://download.gnome.org/sources/gtk+/3.24/gtk+-%{version}.tar.xz +# https://gitlab.gnome.org/GNOME/gtk/merge_requests/1142 +# Try to prevent copy/cut not working properly: +# https://gitlab.gnome.org/GNOME/mutter/issues/878 +# https://bugzilla.redhat.com/show_bug.cgi?id=1763875 +Patch0: 1142.patch BuildRequires: pkgconfig(atk) >= %{atk_version} BuildRequires: pkgconfig(atk-bridge-2.0) @@ -325,6 +330,9 @@ gtk-query-immodules-3.0-%{__isa_bits} --update-cache &>/dev/null || : %{_datadir}/installed-tests/ %changelog +* Mon Oct 21 2019 Adam Williamson <awilliam@redhat.com> - 3.24.12-2 +- Backport PR #1142 to try and fix intermittent copy/cut failures + * Fri Oct 04 2019 Kalev Lember <klember@redhat.com> - 3.24.12-1 - Update to 3.24.12 |