diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-08-28 22:25:06 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-08-29 11:20:57 -0400 |
commit | 667b9447665ff93d6422efe92916ce244760bfda (patch) | |
tree | c8b7c79a6101aa7284263b02b0337fb159059e8b | |
parent | dedd54d84948863fe3e6299f6afa3686d4769784 (diff) | |
download | gtk+-667b9447665ff93d6422efe92916ce244760bfda.tar.gz |
Set the new state flag
For now, we only set the new visible focus state
on the focus widget, when we have visible focus.
Later on, we will allow setting it on other widgets.
-rw-r--r-- | gtk/gtkwidget.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index b2e13dfb3d..2e8b4cdfef 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -15486,10 +15486,20 @@ gtk_widget_set_focus_child (GtkWidget *widget, } if (priv->focus_child) - gtk_widget_unset_state_flags (priv->focus_child, GTK_STATE_FLAG_FOCUSED); + gtk_widget_unset_state_flags (priv->focus_child, + GTK_STATE_FLAG_FOCUSED|GTK_STATE_FLAG_FOCUS_VISIBLE); if (child) - gtk_widget_set_state_flags (child, GTK_STATE_FLAG_FOCUSED, FALSE); + { + GtkWidget *toplevel; + GtkStateFlags flags = GTK_STATE_FLAG_FOCUSED; + + toplevel = _gtk_widget_get_toplevel (widget); + if (!GTK_IS_WINDOW (toplevel) || gtk_window_get_focus_visible (GTK_WINDOW (toplevel))) + flags |= GTK_STATE_FLAG_FOCUS_VISIBLE; + + gtk_widget_set_state_flags (child, flags, FALSE); + } g_set_object (&priv->focus_child, child); |