[gtk/wip/matthiasc/focus2] notebook: Reinstate previous focus behavior



commit 5ddbfef8c9fb8ad75d0e9d0f487971832ff06579
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Mar 11 15:35:51 2019 -0400

    notebook: Reinstate previous focus behavior
    
    We want the overall tab order to be
    start-action
    current tab
    end-action
    page
    To achieve this, make the tabs_widget have only
    a single focus location, for the current tab.

 gtk/gtknotebook.c | 34 +++++++++++++++++++++++++++++-----
 1 file changed, 29 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index 0c48edfbfa..099b470d3b 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -704,6 +704,9 @@ static void gtk_notebook_allocate_tabs       (GtkGizmo         *gizmo,
                                               int               baseline);
 static void     gtk_notebook_snapshot_tabs   (GtkGizmo         *gizmo,
                                               GtkSnapshot      *snapshot);
+static GtkWidget *gtk_notebook_next_focus_child_tabs (GtkGizmo         *gizmo,
+                                                      GtkWidget        *child,
+                                                      GtkDirectionType  direction);
 
 /*** GtkNotebook Private Functions ***/
 static void gtk_notebook_real_remove         (GtkNotebook      *notebook,
@@ -1281,10 +1284,11 @@ gtk_notebook_init (GtkNotebook *notebook)
   gtk_widget_hide (priv->header_widget);
   gtk_container_add (GTK_CONTAINER (priv->box), priv->header_widget);
 
-  priv->tabs_widget = gtk_gizmo_new ("tabs",
-                                     gtk_notebook_measure_tabs,
-                                     gtk_notebook_allocate_tabs,
-                                     gtk_notebook_snapshot_tabs);
+  priv->tabs_widget = gtk_gizmo_new_with_focus ("tabs",
+                                                gtk_notebook_measure_tabs,
+                                                gtk_notebook_allocate_tabs,
+                                                gtk_notebook_snapshot_tabs,
+                                                gtk_notebook_next_focus_child_tabs);
   gtk_widget_set_hexpand (priv->tabs_widget, TRUE);
   gtk_container_add (GTK_CONTAINER (priv->header_widget), priv->tabs_widget);
 
@@ -4238,6 +4242,27 @@ gtk_notebook_snapshot_tabs (GtkGizmo    *gizmo,
     gtk_widget_snapshot_child (GTK_WIDGET (gizmo), priv->cur_page->tab_widget, snapshot);
 }
 
+static GtkWidget *
+gtk_notebook_next_focus_child_tabs (GtkGizmo        *gizmo,
+                                    GtkWidget        *child,
+                                    GtkDirectionType  direction)
+{
+  GtkWidget *widget = gtk_widget_get_parent (gtk_widget_get_parent (GTK_WIDGET (gizmo)));
+  GtkNotebook *notebook = GTK_NOTEBOOK (gtk_widget_get_parent (widget));
+  GtkNotebookPrivate *priv = notebook->priv;
+
+  if (direction == GTK_DIR_TAB_FORWARD ||
+      direction == GTK_DIR_TAB_BACKWARD)
+    {
+      if (child == NULL)
+        return priv->cur_page->tab_widget;
+      else
+        return NULL;
+    }
+
+  return gtk_widget_next_focus_child (GTK_WIDGET (gizmo), child, direction);
+}
+
 /* Private GtkNotebook Size Allocate Functions:
  *
  * gtk_notebook_calculate_shown_tabs
@@ -7040,4 +7065,3 @@ gtk_notebook_get_pages (GtkNotebook *notebook)
 
   return priv->pages;
 }
-


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