[gtk/otte/for-master: 4/4] widget: Don't grab focus when can-focus == false



commit 4eb077979f931f68dc20299ee1640e020df6707b
Author: Benjamin Otte <otte redhat com>
Date:   Tue Oct 15 16:30:46 2019 +0200

    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.

 gtk/gtkwidget.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)
---
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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]