widget: Only include visible actors in focus chain

It isn't useful to move the keyboard focus to a hidden actor, so
only include visible actors in the focus chain - this is in fact
the documented behavior of st_widget_get_focus_chain(), so having
the default implementation return all children has always been
unexpected.

https://bugzilla.gnome.org/show_bug.cgi?id=778158
This commit is contained in:
Florian Müllner 2017-02-07 20:22:18 +01:00
parent e6e786a19c
commit a870a4d6de

View File

@ -821,7 +821,19 @@ st_widget_get_paint_volume (ClutterActor *self,
static GList *
st_widget_real_get_focus_chain (StWidget *widget)
{
return clutter_actor_get_children (CLUTTER_ACTOR (widget));
GList *children, *l, *visible = NULL;
children = clutter_actor_get_children (CLUTTER_ACTOR (widget));
for (l = children; l; l = l->next)
{
if (clutter_actor_is_visible (CLUTTER_ACTOR (l->data)))
visible = g_list_prepend (visible, l->data);
}
g_list_free (children);
return g_list_reverse (visible);
}