summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Williamson <awilliam@redhat.com>2019-10-21 15:55:38 -0700
committerAdam Williamson <awilliam@redhat.com>2019-10-21 15:55:38 -0700
commit9c20882d3bd71be65b8222d86455232f4e74ceb5 (patch)
treed5eaf030a0059c754eb1da9391285ee60369a3ed
parentUpdate to 3.24.12 (diff)
downloadgtk3-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.patch112
-rw-r--r--gtk3.spec10
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
+
diff --git a/gtk3.spec b/gtk3.spec
index e66d01f..e59538e 100644
--- a/gtk3.spec
+++ b/gtk3.spec
@@ -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
bgstack15