[gnome-control-center/wip/carlosg/window-focus-checks] shell: Avoid handling map events from other windows




commit 7196e8aaea48054dd5fe825d371aec2319960897
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Apr 21 20:54:06 2021 +0200

    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;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]