summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-04-16 07:26:32 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-04-16 07:35:26 -0400
commit4d19de4e033c7efe69f96acb98db1d35eaea3587 (patch)
tree05280d7f7f6d0d49c771a4451f0816c8ac229d16
parent24cd05672e865340a8410eb6600f0960798b7189 (diff)
downloadgtk+-4d19de4e033c7efe69f96acb98db1d35eaea3587.tar.gz
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
-rw-r--r--gtk/gtkwindow.c14
1 files 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