[gtk/new-style-menu: 38/48] popover menu: Implement focus



commit abc9fef615f934711a1ab2c5b4289fae55165648
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jun 9 02:25:12 2019 +0000

    popover menu: Implement focus
    
    We want to cycle around for up/down arrows.

 gtk/gtkpopovermenu.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
---
diff --git a/gtk/gtkpopovermenu.c b/gtk/gtkpopovermenu.c
index 65c1c87844..8bd6af266f 100644
--- a/gtk/gtkpopovermenu.c
+++ b/gtk/gtkpopovermenu.c
@@ -254,6 +254,38 @@ gtk_popover_menu_set_property (GObject      *object,
     }
 }
 
+static gboolean
+gtk_popover_menu_focus (GtkWidget        *widget,
+                        GtkDirectionType  direction)
+{
+  if (gtk_widget_get_first_child (widget) == NULL)
+    {
+      return FALSE;
+    }
+  else
+    {
+      if (gtk_widget_focus_move (widget, direction))
+        return TRUE;
+
+      if (direction == GTK_DIR_UP || direction == GTK_DIR_DOWN)
+        {
+          GtkWidget *p;
+
+          /* cycle around */
+          for (p = gtk_window_get_focus (GTK_WINDOW (gtk_widget_get_root (widget)));
+               p != widget;
+               p = gtk_widget_get_parent (p))
+            {
+              gtk_widget_set_focus_child (p, NULL);
+            }
+          if (gtk_widget_focus_move (widget, direction))
+            return TRUE;
+       }
+    }
+
+  return FALSE;
+}
+
 static void
 gtk_popover_menu_class_init (GtkPopoverMenuClass *klass)
 {
@@ -266,6 +298,7 @@ gtk_popover_menu_class_init (GtkPopoverMenuClass *klass)
 
   widget_class->map = gtk_popover_menu_map;
   widget_class->unmap = gtk_popover_menu_unmap;
+  widget_class->focus = gtk_popover_menu_focus;
 
   container_class->add = gtk_popover_menu_add;
   container_class->remove = gtk_popover_menu_remove;


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