From a0d85f36abce9e06acdb993f155a01c62fef33b1 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 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); } } -- 2.30.2