summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-08-28 22:25:06 -0400
committerMatthias Clasen <mclasen@redhat.com>2017-08-29 11:20:57 -0400
commit667b9447665ff93d6422efe92916ce244760bfda (patch)
treec8b7c79a6101aa7284263b02b0337fb159059e8b
parentdedd54d84948863fe3e6299f6afa3686d4769784 (diff)
downloadgtk+-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.c14
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);