From 39df734d092bfe2c5e7c4cc3ce750df1d4e68ef7 Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Thu, 31 Mar 2022 11:51:17 -0700 Subject: [PATCH] Backport MR #4605 to fix portal save/load dialogs on X (#2068041) --- ...ext-Handle-switches-between-displays.patch | 57 +++++++++++++++++++ gtk4.spec | 10 +++- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 0001-gtkimmulticontext-Handle-switches-between-displays.patch diff --git a/0001-gtkimmulticontext-Handle-switches-between-displays.patch b/0001-gtkimmulticontext-Handle-switches-between-displays.patch new file mode 100644 index 0000000..392db31 --- /dev/null +++ b/0001-gtkimmulticontext-Handle-switches-between-displays.patch @@ -0,0 +1,57 @@ +From b67da38916b710ba6eedd65ffb569a29e47ddb4d Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Thu, 31 Mar 2022 16:29:34 +0200 +Subject: [PATCH] gtkimmulticontext: Handle switches between displays + +Currently the GtkIMMultiContext may stick to a delegate GtkIMContext +that no longer applies after the multicontext is dissociated from +any widget. + +Handle set_client_widget() so that it can handle changes between +widgets from 2 different display, but also so the delegate is made +NULL whenever the context has a NULL widget. + +Doing so, any new client widget results in a new delegate IM context +lookup from the right GdkDisplay and GtkSettings, which avoids any +mix up. + +Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4805 +--- + gtk/gtkimmulticontext.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/gtk/gtkimmulticontext.c b/gtk/gtkimmulticontext.c +index 47347d299b..0a5ef9a5a6 100644 +--- a/gtk/gtkimmulticontext.c ++++ b/gtk/gtkimmulticontext.c +@@ -314,6 +314,11 @@ gtk_im_multicontext_set_client_widget (GtkIMContext *context, + GtkIMContext *delegate; + GtkSettings *settings; + ++ if (priv->client_widget == widget) ++ return; ++ ++ gtk_im_multicontext_set_delegate (self, NULL, TRUE); ++ + if (priv->client_widget != NULL) + { + settings = gtk_widget_get_settings (priv->client_widget); +@@ -332,11 +337,11 @@ gtk_im_multicontext_set_client_widget (GtkIMContext *context, + g_signal_connect (settings, "notify::gtk-im-module", + G_CALLBACK (im_module_setting_changed), + self); +- } + +- delegate = gtk_im_multicontext_get_delegate (self); +- if (delegate) +- gtk_im_context_set_client_widget (delegate, widget); ++ delegate = gtk_im_multicontext_get_delegate (self); ++ if (delegate) ++ gtk_im_context_set_client_widget (delegate, widget); ++ } + } + + static void +-- +2.35.1 + diff --git a/gtk4.spec b/gtk4.spec index 6bb3db2..537383b 100644 --- a/gtk4.spec +++ b/gtk4.spec @@ -17,12 +17,17 @@ Name: gtk4 Version: 4.6.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: GTK graphical user interface library License: LGPLv2+ URL: https://www.gtk.org Source0: https://download.gnome.org/sources/gtk/4.6/gtk-%{version}.tar.xz +# Fix portal save/load dialogs not working on X +# https://bugzilla.redhat.com/show_bug.cgi?id=2068041 +# https://gitlab.gnome.org/GNOME/gtk/-/issues/4805 +# https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4605 +Patch0: 0001-gtkimmulticontext-Handle-switches-between-displays.patch BuildRequires: cups-devel BuildRequires: desktop-file-utils @@ -227,6 +232,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_mandir}/man1/gtk4-widget-factory.1* %changelog +* Thu Mar 31 2022 Adam Williamson - 4.6.2-2 +- Backport MR #4605 to fix portal save/load dialogs on X (#2068041) + * Sat Mar 19 2022 David King - 4.6.2-1 - Update to 4.6.2