summaryrefslogtreecommitdiff
path: root/0001-shell-Avoid-handling-map-events-from-other-windows.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-shell-Avoid-handling-map-events-from-other-windows.patch')
-rw-r--r--0001-shell-Avoid-handling-map-events-from-other-windows.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/0001-shell-Avoid-handling-map-events-from-other-windows.patch b/0001-shell-Avoid-handling-map-events-from-other-windows.patch
new file mode 100644
index 0000000..83fc0a5
--- /dev/null
+++ b/0001-shell-Avoid-handling-map-events-from-other-windows.patch
@@ -0,0 +1,50 @@
+From 7196e8aaea48054dd5fe825d371aec2319960897 Mon Sep 17 00:00:00 2001
+From: Carlos Garnacho <carlosg@gnome.org>
+Date: Wed, 21 Apr 2021 20:54:06 +0200
+Subject: [PATCH] shell: Avoid handling map events from other windows
+
+The CcWindow tries to unset the focus when first mapping the window.
+However this pretty wide check intercepts mapping events from other
+windows than the toplevel (e.g. subsurfaces, for popovers). This
+causes the focus to move away from the popover, overriding its
+modality.
+
+Check that the event received is addressed to the CcWindow's
+GDK window before unsetting the focus, so we don't mess with popover
+focus.
+
+Fixes: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1327
+---
+ shell/cc-window.c | 15 ++++++++++-----
+ 1 file changed, 10 insertions(+), 5 deletions(-)
+
+diff --git a/shell/cc-window.c b/shell/cc-window.c
+index 400c39116..de4eccc04 100644
+--- a/shell/cc-window.c
++++ b/shell/cc-window.c
+@@ -585,12 +585,17 @@ gdk_window_set_cb (CcWindow *self)
+ }
+
+ static gboolean
+-window_map_event_cb (CcWindow *self)
++window_map_event_cb (CcWindow *self,
++ GdkEvent *event)
+ {
+- /* If focus ends up in a category icon view one of the items is
+- * immediately selected which looks odd when we are starting up, so
+- * we explicitly unset the focus here. */
+- gtk_window_set_focus (GTK_WINDOW (self), NULL);
++ if (event->any.window == gtk_widget_get_window (GTK_WIDGET (self)))
++ {
++ /* If focus ends up in a category icon view one of the items is
++ * immediately selected which looks odd when we are starting up, so
++ * we explicitly unset the focus here. */
++ gtk_window_set_focus (GTK_WINDOW (self), NULL);
++ }
++
+ return GDK_EVENT_PROPAGATE;
+ }
+
+--
+2.37.3
+