Merge branch 'fix-can-focus' into 'master'

widget: Fix can-focus

Closes #3610

See merge request GNOME/gtk!3123
This commit is contained in:
Matthias Clasen
2021-01-27 05:34:21 +00:00

View File

@@ -4390,13 +4390,27 @@ gtk_widget_can_activate (GtkWidget *self)
return FALSE;
}
static gboolean
get_effective_can_focus (GtkWidget *widget)
{
GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
if (!priv->can_focus)
return FALSE;
if (priv->parent)
return get_effective_can_focus (priv->parent);
return TRUE;
}
static gboolean
gtk_widget_real_mnemonic_activate (GtkWidget *widget,
gboolean group_cycling)
{
if (!group_cycling && gtk_widget_can_activate (widget))
gtk_widget_activate (widget);
else if (gtk_widget_get_can_focus (widget))
else if (get_effective_can_focus (widget))
return gtk_widget_grab_focus (widget);
else
{
@@ -4782,7 +4796,7 @@ gtk_widget_grab_focus (GtkWidget *widget)
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
if (!gtk_widget_is_sensitive (widget) ||
!gtk_widget_get_can_focus (widget) ||
!get_effective_can_focus (widget) ||
widget->priv->root == NULL)
return FALSE;