From: Benjamin Otte Date: Tue, 15 Oct 2019 14:30:46 +0000 (+0200) Subject: widget: Don't grab focus when can-focus == false X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~710^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=4eb077979f931f68dc20299ee1640e020df6707b;p=gtk4.git widget: Don't grab focus when can-focus == false ... inside the default vfunc. Instead, walk the children until we find the first widget that can be focused. If no child can be focused, return FALSE from grab_focus. --- diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index c3e0e288d2..0b8e4a07e2 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5436,9 +5436,23 @@ static gboolean gtk_widget_real_grab_focus (GtkWidget *focus_widget) { GtkWidgetPrivate *priv = gtk_widget_get_instance_private (focus_widget); + GtkWidget *child; - gtk_root_set_focus (priv->root, focus_widget); - return TRUE; + if (priv->can_focus) + { + gtk_root_set_focus (priv->root, focus_widget); + return TRUE; + } + + for (child = _gtk_widget_get_first_child (focus_widget); + child != NULL; + child = _gtk_widget_get_next_sibling (child)) + { + if (gtk_widget_grab_focus (child)) + return TRUE; + } + + return FALSE; } static gboolean