From: Matthias Clasen Date: Mon, 17 Oct 2022 19:10:51 +0000 (-0400) Subject: window: Don't focus invisible widgets X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~9^2~165^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f5063c14357b2206c895e297ce855ac8363322e5;p=gtk4.git window: Don't focus invisible widgets Only clear a queued move_focus if the widget we are focusing is actually visible. This was happening in some cases when popovers are dismissed by clicking outside, and it was causing us to miss proper focus updates that were already queued. --- diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index ff16a68104..1de17f9048 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -2004,7 +2004,9 @@ gtk_window_root_set_focus (GtkRoot *root, if (focus == priv->focus_widget) { - priv->move_focus = FALSE; + if (priv->move_focus && + focus && gtk_widget_is_visible (focus)) + priv->move_focus = FALSE; return; } @@ -2024,7 +2026,9 @@ gtk_window_root_set_focus (GtkRoot *root, g_clear_object (&old_focus); - priv->move_focus = FALSE; + if (priv->move_focus && + focus && gtk_widget_is_visible (focus)) + priv->move_focus = FALSE; g_object_notify (G_OBJECT (self), "focus-widget"); } @@ -4689,7 +4693,7 @@ maybe_unset_focus_and_default (GtkWindow *window) break; } - parent = _gtk_widget_get_parent (parent); + parent = _gtk_widget_get_parent (parent); } }