From 4d19de4e033c7efe69f96acb98db1d35eaea3587 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 16 Apr 2021 07:26:32 -0400 Subject: [PATCH] window: Fix deferred focus unsetting In commit 4a76abffd4d62cbb, we deferred unsetting focus and default until after the next draw, overlooking the case where the focus is set to another widget before we ever get to the unsetting. Fixes: #3413 --- gtk/gtkwindow.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 99bb28feb6..17beb19fa3 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -2011,6 +2011,8 @@ gtk_window_root_set_focus (GtkRoot *root, g_clear_object (&old_focus); + priv->move_focus = FALSE; + g_object_notify (G_OBJECT (self), "focus-widget"); } @@ -2288,6 +2290,8 @@ gtk_window_set_default_widget (GtkWindow *window, priv->default_widget = default_widget; + priv->unset_default = FALSE; + if (priv->default_widget) { if (priv->focus_widget == NULL || @@ -4671,16 +4675,10 @@ maybe_unset_focus_and_default (GtkWindow *window) GtkWindowPrivate *priv = gtk_window_get_instance_private (window); if (priv->move_focus) - { - gtk_widget_child_focus (GTK_WIDGET (window), GTK_DIR_TAB_FORWARD); - priv->move_focus = FALSE; - } + gtk_widget_child_focus (GTK_WIDGET (window), GTK_DIR_TAB_FORWARD); if (priv->unset_default) - { - gtk_window_set_default_widget (window, NULL); - priv->unset_default = FALSE; - } + gtk_window_set_default_widget (window, NULL); } static gboolean