From 60399e05fbaf56d00116e72a28320405b6aaae89 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 17 Oct 2022 15:10:51 -0400 Subject: [PATCH] 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. --- gtk/gtkwindow.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 7865962c80..c68cf2f8f8 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -2048,7 +2048,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; } @@ -2068,7 +2070,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"); } @@ -4733,7 +4737,7 @@ maybe_unset_focus_and_default (GtkWindow *window) break; } - parent = _gtk_widget_get_parent (parent); + parent = _gtk_widget_get_parent (parent); } }