[gtk/wip/matthiasc/focus2] box: Add a next-focus-chain implementation



commit 6a54cb3d3b0bb076aac079a8be13ffadbc887d2c
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Mar 11 15:08:12 2019 -0400

    box: Add a next-focus-chain implementation
    
    This just uses the child order for Tab/Shift-Tab.

 gtk/gtkbox.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
---
diff --git a/gtk/gtkbox.c b/gtk/gtkbox.c
index 307276c63f..851b3efde5 100644
--- a/gtk/gtkbox.c
+++ b/gtk/gtkbox.c
@@ -123,6 +123,9 @@ static void gtk_box_measure (GtkWidget      *widget,
                              int            *natural,
                              int            *minimum_baseline,
                              int            *natural_baseline);
+GtkWidget * gtk_box_next_focus_child (GtkWidget        *widget,
+                                      GtkWidget        *child,
+                                      GtkDirectionType  direction);
 
 G_DEFINE_TYPE_WITH_CODE (GtkBox, gtk_box, GTK_TYPE_CONTAINER,
                          G_ADD_PRIVATE (GtkBox)
@@ -140,6 +143,7 @@ gtk_box_class_init (GtkBoxClass *class)
 
   widget_class->size_allocate = gtk_box_size_allocate;
   widget_class->measure = gtk_box_measure;
+  widget_class->next_focus_child = gtk_box_next_focus_child;
 
   container_class->add = gtk_box_add;
   container_class->remove = gtk_box_remove;
@@ -1149,3 +1153,26 @@ gtk_box_reorder_child_after (GtkBox    *box,
                              gtk_widget_get_css_node (child),
                              sibling ? gtk_widget_get_css_node (sibling) : NULL);
 }
+
+GtkWidget *
+gtk_box_next_focus_child (GtkWidget *widget,
+                          GtkWidget *child,
+                          GtkDirectionType direction)
+{
+  if (direction == GTK_DIR_TAB_FORWARD)
+    {
+      if (child)
+        return gtk_widget_get_next_sibling (child);
+      else
+        return gtk_widget_get_first_child (widget);
+    }
+  else if (direction == GTK_DIR_TAB_BACKWARD)
+    {
+      if (child)
+        return gtk_widget_get_prev_sibling (child);
+      else
+        return gtk_widget_get_last_child (widget);
+    }
+
+  return GTK_WIDGET_CLASS (gtk_box_parent_class)->next_focus_child (widget, child, direction);
+}


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