[nautilus/wip/antoniof/gtk4-preparation-popovers: 8/10] notebook: Don't subclass GtkNotebook




commit 113e27928ca261208d7914cf5c4b48068bc7f641
Author: António Fernandes <antoniof gnome org>
Date:   Sun Dec 19 17:02:49 2021 +0000

    notebook: Don't subclass GtkNotebook
    
    GtkNotebook is a final class in GTK 4.
    
    Drop the NautliusNotebook class and have its API act on GtkNotebook.

 src/nautilus-notebook.c             | 134 ++++++++++++++----------------------
 src/nautilus-notebook.h             |  29 ++++----
 src/nautilus-window-slot-dnd.c      |   2 +-
 src/nautilus-window.c               |  20 +++---
 src/resources/ui/nautilus-window.ui |   2 +-
 5 files changed, 77 insertions(+), 110 deletions(-)
---
diff --git a/src/nautilus-notebook.c b/src/nautilus-notebook.c
index 2681a47fc..e8e93943f 100644
--- a/src/nautilus-notebook.c
+++ b/src/nautilus-notebook.c
@@ -37,43 +37,21 @@
 
 #define AFTER_ALL_TABS -1
 
-struct _NautilusNotebook
-{
-    GtkNotebook parent_instance;
-};
-
-G_DEFINE_TYPE (NautilusNotebook, nautilus_notebook, GTK_TYPE_NOTEBOOK);
-
-static void
-nautilus_notebook_dispose (GObject *object)
-{
-    G_OBJECT_CLASS (nautilus_notebook_parent_class)->dispose (object);
-}
-
-static void
-nautilus_notebook_class_init (NautilusNotebookClass *klass)
-{
-    GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-    object_class->dispose = nautilus_notebook_dispose;
-}
-
 static gint
-find_tab_num_at_pos (NautilusNotebook *notebook,
-                     gint              abs_x,
-                     gint              abs_y)
+find_tab_num_at_pos (GtkNotebook *notebook,
+                     gint         abs_x,
+                     gint         abs_y)
 {
     int page_num = 0;
-    GtkNotebook *nb = GTK_NOTEBOOK (notebook);
     GtkWidget *page;
     GtkAllocation allocation;
 
-    while ((page = gtk_notebook_get_nth_page (nb, page_num)))
+    while ((page = gtk_notebook_get_nth_page (notebook, page_num)))
     {
         GtkWidget *tab;
         gint max_x, max_y;
 
-        tab = gtk_notebook_get_tab_label (nb, page);
+        tab = gtk_notebook_get_tab_label (notebook, page);
         g_return_val_if_fail (tab != NULL, -1);
 
         if (!gtk_widget_get_mapped (GTK_WIDGET (tab)))
@@ -119,32 +97,31 @@ on_page_added (GtkNotebook *notebook,
     gtk_notebook_set_tab_detachable (notebook, child, TRUE);
 }
 
-static void
-nautilus_notebook_init (NautilusNotebook *notebook)
+void
+nautilus_notebook_setup (GtkNotebook *notebook)
 {
-    gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE);
-    gtk_notebook_set_show_border (GTK_NOTEBOOK (notebook), FALSE);
-    gtk_notebook_set_show_tabs (GTK_NOTEBOOK (notebook), FALSE);
+    gtk_notebook_set_scrollable (notebook, TRUE);
+    gtk_notebook_set_show_border (notebook, FALSE);
+    gtk_notebook_set_show_tabs (notebook, FALSE);
 
     g_signal_connect (notebook, "page-removed", G_CALLBACK (on_page_removed), NULL);
     g_signal_connect (notebook, "page-added", G_CALLBACK (on_page_added), NULL);
 }
 
 gboolean
-nautilus_notebook_contains_slot (NautilusNotebook   *notebook,
+nautilus_notebook_contains_slot (GtkNotebook        *notebook,
                                  NautilusWindowSlot *slot)
 {
-    GtkNotebook *container = GTK_NOTEBOOK (notebook);
     GtkWidget *child;
     gint n_pages;
     gboolean found = FALSE;
 
     g_return_val_if_fail (slot != NULL, FALSE);
 
-    n_pages = gtk_notebook_get_n_pages (container);
+    n_pages = gtk_notebook_get_n_pages (notebook);
     for (gint i = 0; i < n_pages; i++)
     {
-        child = gtk_notebook_get_nth_page (container, i);
+        child = gtk_notebook_get_nth_page (notebook, i);
         if ((gpointer) child == (gpointer) slot)
         {
             found = TRUE;
@@ -156,10 +133,10 @@ nautilus_notebook_contains_slot (NautilusNotebook   *notebook,
 }
 
 gboolean
-nautilus_notebook_get_tab_clicked (NautilusNotebook *notebook,
-                                   gint              x,
-                                   gint              y,
-                                   gint             *position)
+nautilus_notebook_get_tab_clicked (GtkNotebook *notebook,
+                                   gint         x,
+                                   gint         y,
+                                   gint        *position)
 {
     gint tab_num;
 
@@ -173,16 +150,16 @@ nautilus_notebook_get_tab_clicked (NautilusNotebook *notebook,
 }
 
 void
-nautilus_notebook_sync_loading (NautilusNotebook   *notebook,
+nautilus_notebook_sync_loading (GtkNotebook        *notebook,
                                 NautilusWindowSlot *slot)
 {
     GtkWidget *tab_label, *spinner, *icon;
     gboolean active, allow_stop;
 
-    g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
+    g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
     g_return_if_fail (NAUTILUS_IS_WINDOW_SLOT (slot));
 
-    tab_label = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook),
+    tab_label = gtk_notebook_get_tab_label (notebook,
                                             GTK_WIDGET (slot));
     g_return_if_fail (GTK_IS_WIDGET (tab_label));
 
@@ -214,7 +191,7 @@ nautilus_notebook_sync_loading (NautilusNotebook   *notebook,
 }
 
 void
-nautilus_notebook_sync_tab_label (NautilusNotebook   *notebook,
+nautilus_notebook_sync_tab_label (GtkNotebook        *notebook,
                                   NautilusWindowSlot *slot)
 {
     GtkWidget *hbox, *label;
@@ -222,10 +199,10 @@ nautilus_notebook_sync_tab_label (NautilusNotebook   *notebook,
     GFile *location;
     const gchar *title_name;
 
-    g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
+    g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
     g_return_if_fail (NAUTILUS_IS_WINDOW_SLOT (slot));
 
-    hbox = gtk_notebook_get_tab_label (GTK_NOTEBOOK (notebook), GTK_WIDGET (slot));
+    hbox = gtk_notebook_get_tab_label (notebook, GTK_WIDGET (slot));
     g_return_if_fail (GTK_IS_WIDGET (hbox));
 
     label = GTK_WIDGET (g_object_get_data (G_OBJECT (hbox), "label"));
@@ -258,7 +235,7 @@ nautilus_notebook_sync_tab_label (NautilusNotebook   *notebook,
 }
 
 static GtkWidget *
-build_tab_label (NautilusNotebook   *notebook,
+build_tab_label (GtkNotebook        *notebook,
                  NautilusWindowSlot *slot)
 {
     GtkWidget *box;
@@ -315,20 +292,19 @@ build_tab_label (NautilusNotebook   *notebook,
 }
 
 int
-nautilus_notebook_add_tab (NautilusNotebook   *notebook,
+nautilus_notebook_add_tab (GtkNotebook        *notebook,
                            NautilusWindowSlot *slot,
                            int                 position,
                            gboolean            jump_to)
 {
-    GtkNotebook *gnotebook = GTK_NOTEBOOK (notebook);
     GtkWidget *tab_label;
 
-    g_return_val_if_fail (NAUTILUS_IS_NOTEBOOK (notebook), -1);
+    g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), -1);
     g_return_val_if_fail (NAUTILUS_IS_WINDOW_SLOT (slot), -1);
 
     tab_label = build_tab_label (notebook, slot);
 
-    position = gtk_notebook_insert_page (GTK_NOTEBOOK (notebook),
+    position = gtk_notebook_insert_page (notebook,
                                          GTK_WIDGET (slot),
                                          tab_label,
                                          position);
@@ -344,46 +320,40 @@ nautilus_notebook_add_tab (NautilusNotebook   *notebook,
 
     if (jump_to)
     {
-        gtk_notebook_set_current_page (gnotebook, position);
+        gtk_notebook_set_current_page (notebook, position);
     }
 
     return position;
 }
 
 void
-nautilus_notebook_reorder_current_child_relative (NautilusNotebook *notebook,
-                                                  int               offset)
+nautilus_notebook_reorder_current_child_relative (GtkNotebook *notebook,
+                                                  int          offset)
 {
-    GtkNotebook *gnotebook;
     GtkWidget *child;
     int page;
 
-    g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
+    g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
     if (!nautilus_notebook_can_reorder_current_child_relative (notebook, offset))
     {
         return;
     }
 
-    gnotebook = GTK_NOTEBOOK (notebook);
-
-    page = gtk_notebook_get_current_page (gnotebook);
-    child = gtk_notebook_get_nth_page (gnotebook, page);
-    gtk_notebook_reorder_child (gnotebook, child, page + offset);
+    page = gtk_notebook_get_current_page (notebook);
+    child = gtk_notebook_get_nth_page (notebook, page);
+    gtk_notebook_reorder_child (notebook, child, page + offset);
 }
 
 static gboolean
-nautilus_notebook_is_valid_relative_position (NautilusNotebook *notebook,
-                                              int               offset)
+nautilus_notebook_is_valid_relative_position (GtkNotebook *notebook,
+                                              int          offset)
 {
-    GtkNotebook *gnotebook;
     int page;
     int n_pages;
 
-    gnotebook = GTK_NOTEBOOK (notebook);
-
-    page = gtk_notebook_get_current_page (gnotebook);
-    n_pages = gtk_notebook_get_n_pages (gnotebook) - 1;
+    page = gtk_notebook_get_current_page (notebook);
+    n_pages = gtk_notebook_get_n_pages (notebook) - 1;
     if (page < 0 ||
         (offset < 0 && page < -offset) ||
         (offset > 0 && page > n_pages - offset))
@@ -395,27 +365,27 @@ nautilus_notebook_is_valid_relative_position (NautilusNotebook *notebook,
 }
 
 gboolean
-nautilus_notebook_can_reorder_current_child_relative (NautilusNotebook *notebook,
-                                                      int               offset)
+nautilus_notebook_can_reorder_current_child_relative (GtkNotebook *notebook,
+                                                      int          offset)
 {
-    g_return_val_if_fail (NAUTILUS_IS_NOTEBOOK (notebook), FALSE);
+    g_return_val_if_fail (GTK_IS_NOTEBOOK (notebook), FALSE);
 
     return nautilus_notebook_is_valid_relative_position (notebook, offset);
 }
 
 void
-nautilus_notebook_next_page (NautilusNotebook *notebook)
+nautilus_notebook_next_page (GtkNotebook *notebook)
 {
     gint current_page, n_pages;
 
-    g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
+    g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-    current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
-    n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook));
+    current_page = gtk_notebook_get_current_page (notebook);
+    n_pages = gtk_notebook_get_n_pages (notebook);
 
     if (current_page < n_pages - 1)
     {
-        gtk_notebook_next_page (GTK_NOTEBOOK (notebook));
+        gtk_notebook_next_page (notebook);
     }
     else
     {
@@ -427,23 +397,23 @@ nautilus_notebook_next_page (NautilusNotebook *notebook)
 
         if (wrap_around)
         {
-            gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0);
+            gtk_notebook_set_current_page (notebook, 0);
         }
     }
 }
 
 void
-nautilus_notebook_prev_page (NautilusNotebook *notebook)
+nautilus_notebook_prev_page (GtkNotebook *notebook)
 {
     gint current_page;
 
-    g_return_if_fail (NAUTILUS_IS_NOTEBOOK (notebook));
+    g_return_if_fail (GTK_IS_NOTEBOOK (notebook));
 
-    current_page = gtk_notebook_get_current_page (GTK_NOTEBOOK (notebook));
+    current_page = gtk_notebook_get_current_page (notebook);
 
     if (current_page > 0)
     {
-        gtk_notebook_prev_page (GTK_NOTEBOOK (notebook));
+        gtk_notebook_prev_page (notebook);
     }
     else
     {
@@ -455,7 +425,7 @@ nautilus_notebook_prev_page (NautilusNotebook *notebook)
 
         if (wrap_around)
         {
-            gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), -1);
+            gtk_notebook_set_current_page (notebook, -1);
         }
     }
 }
diff --git a/src/nautilus-notebook.h b/src/nautilus-notebook.h
index ad227d183..bbc17b00d 100644
--- a/src/nautilus-notebook.h
+++ b/src/nautilus-notebook.h
@@ -31,32 +31,29 @@
 
 G_BEGIN_DECLS
 
-#define NAUTILUS_TYPE_NOTEBOOK         (nautilus_notebook_get_type ())
-G_DECLARE_FINAL_TYPE (NautilusNotebook, nautilus_notebook, NAUTILUS, NOTEBOOK, GtkNotebook)
-
-int            nautilus_notebook_add_tab       (NautilusNotebook *nb,
+int            nautilus_notebook_add_tab       (GtkNotebook *nb,
                                                 NautilusWindowSlot *slot,
                                                 int position,
                                                 gboolean jump_to);
        
-void           nautilus_notebook_sync_tab_label (NautilusNotebook *nb,
+void           nautilus_notebook_sync_tab_label (GtkNotebook *nb,
                                                  NautilusWindowSlot *slot);
-void           nautilus_notebook_sync_loading   (NautilusNotebook *nb,
+void           nautilus_notebook_sync_loading   (GtkNotebook *nb,
                                                  NautilusWindowSlot *slot);
 
-void           nautilus_notebook_reorder_current_child_relative (NautilusNotebook *notebook,
+void           nautilus_notebook_reorder_current_child_relative (GtkNotebook *notebook,
                                                                  int offset);
-gboolean        nautilus_notebook_can_reorder_current_child_relative (NautilusNotebook *notebook,
+gboolean        nautilus_notebook_can_reorder_current_child_relative (GtkNotebook *notebook,
                                                                      int offset);
-void            nautilus_notebook_prev_page (NautilusNotebook *notebook);
-void            nautilus_notebook_next_page (NautilusNotebook *notebook);
+void            nautilus_notebook_prev_page (GtkNotebook *notebook);
+void            nautilus_notebook_next_page (GtkNotebook *notebook);
 
-gboolean        nautilus_notebook_contains_slot (NautilusNotebook   *notebook,
+gboolean        nautilus_notebook_contains_slot (GtkNotebook   *notebook,
                                                  NautilusWindowSlot *slot);
 
-gboolean        nautilus_notebook_get_tab_clicked (NautilusNotebook *notebook,
-                                                   gint              x,
-                                                   gint              y,
-                                                   gint             *position);
-
+gboolean        nautilus_notebook_get_tab_clicked (GtkNotebook *notebook,
+                                                   gint         x,
+                                                   gint         y,
+                                                   gint        *position);
+void            nautilus_notebook_setup           (GtkNotebook *notebook);
 G_END_DECLS
diff --git a/src/nautilus-window-slot-dnd.c b/src/nautilus-window-slot-dnd.c
index 6af9e20aa..4f493eb1d 100644
--- a/src/nautilus-window-slot-dnd.c
+++ b/src/nautilus-window-slot-dnd.c
@@ -64,7 +64,7 @@ switch_tab (NautilusDragSlotProxyInfo *drag_info)
         return;
     }
 
-    notebook = gtk_widget_get_ancestor (GTK_WIDGET (drag_info->target_slot), NAUTILUS_TYPE_NOTEBOOK);
+    notebook = gtk_widget_get_ancestor (GTK_WIDGET (drag_info->target_slot), GTK_TYPE_NOTEBOOK);
     n_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (notebook));
 
     for (idx = 0; idx < n_pages; idx++)
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 1f5a14005..025e0971f 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -354,7 +354,7 @@ action_tab_previous (GSimpleAction *action,
 {
     NautilusWindow *window = user_data;
 
-    nautilus_notebook_prev_page (NAUTILUS_NOTEBOOK (window->notebook));
+    nautilus_notebook_prev_page (GTK_NOTEBOOK (window->notebook));
 }
 
 static void
@@ -364,7 +364,7 @@ action_tab_next (GSimpleAction *action,
 {
     NautilusWindow *window = user_data;
 
-    nautilus_notebook_next_page (NAUTILUS_NOTEBOOK (window->notebook));
+    nautilus_notebook_next_page (GTK_NOTEBOOK (window->notebook));
 }
 
 static void
@@ -374,7 +374,7 @@ action_tab_move_left (GSimpleAction *action,
 {
     NautilusWindow *window = user_data;
 
-    nautilus_notebook_reorder_current_child_relative (NAUTILUS_NOTEBOOK (window->notebook), -1);
+    nautilus_notebook_reorder_current_child_relative (GTK_NOTEBOOK (window->notebook), -1);
 }
 
 static void
@@ -384,7 +384,7 @@ action_tab_move_right (GSimpleAction *action,
 {
     NautilusWindow *window = user_data;
 
-    nautilus_notebook_reorder_current_child_relative (NAUTILUS_NOTEBOOK (window->notebook), 1);
+    nautilus_notebook_reorder_current_child_relative (GTK_NOTEBOOK (window->notebook), 1);
 }
 
 static void
@@ -545,7 +545,7 @@ nautilus_window_initialize_slot (NautilusWindow          *window,
     g_signal_handlers_block_by_func (window->notebook,
                                      G_CALLBACK (notebook_switch_page_cb),
                                      window);
-    nautilus_notebook_add_tab (NAUTILUS_NOTEBOOK (window->notebook),
+    nautilus_notebook_add_tab (GTK_NOTEBOOK (window->notebook),
                                slot,
                                (flags & NAUTILUS_WINDOW_OPEN_SLOT_APPEND) != 0 ?
                                -1 :
@@ -798,9 +798,9 @@ nautilus_window_sync_allow_stop (NautilusWindow     *window,
 
         /* Avoid updating the notebook if we are calling on dispose or
          * on removal of a notebook tab */
-        if (nautilus_notebook_contains_slot (NAUTILUS_NOTEBOOK (window->notebook), slot))
+        if (nautilus_notebook_contains_slot (GTK_NOTEBOOK (window->notebook), slot))
         {
-            nautilus_notebook_sync_loading (NAUTILUS_NOTEBOOK (window->notebook), slot);
+            nautilus_notebook_sync_loading (GTK_NOTEBOOK (window->notebook), slot);
         }
     }
 }
@@ -1784,7 +1784,7 @@ notebook_button_press_cb (GtkGestureMultiPress *gesture,
     notebook = GTK_NOTEBOOK (window->notebook);
 
     if (n_press != 1 ||
-        !nautilus_notebook_get_tab_clicked (NAUTILUS_NOTEBOOK (window->notebook), x, y, &tab_clicked))
+        !nautilus_notebook_get_tab_clicked (notebook, x, y, &tab_clicked))
     {
         return;
     }
@@ -2408,7 +2408,7 @@ nautilus_window_sync_title (NautilusWindow     *window,
         gtk_window_set_title (GTK_WINDOW (window), nautilus_window_slot_get_title (slot));
     }
 
-    nautilus_notebook_sync_tab_label (NAUTILUS_NOTEBOOK (window->notebook), slot);
+    nautilus_notebook_sync_tab_label (GTK_NOTEBOOK (window->notebook), slot);
 }
 
 #ifdef GDK_WINDOWING_WAYLAND
@@ -2640,8 +2640,8 @@ nautilus_window_init (NautilusWindow *window)
     GtkWindowGroup *window_group;
 
     g_type_ensure (NAUTILUS_TYPE_TOOLBAR);
-    g_type_ensure (NAUTILUS_TYPE_NOTEBOOK);
     gtk_widget_init_template (GTK_WIDGET (window));
+    nautilus_notebook_setup (GTK_NOTEBOOK (window->notebook));
 
     gtk_popover_bind_model (GTK_POPOVER (window->tab_menu),
                             window->tab_menu_model,
diff --git a/src/resources/ui/nautilus-window.ui b/src/resources/ui/nautilus-window.ui
index 744e9d04c..ccc8205db 100644
--- a/src/resources/ui/nautilus-window.ui
+++ b/src/resources/ui/nautilus-window.ui
@@ -69,7 +69,7 @@
               <object class="GtkOverlay" id="main_view">
                 <property name="visible">True</property>
                 <child>
-                  <object class="NautilusNotebook" id="notebook">
+                  <object class="GtkNotebook" id="notebook">
                     <property name="visible">True</property>
                     <property name="show-tabs">False</property>
                     <property name="show-border">False</property>


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