diff options
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.patch | 50 |
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 + |