[libadwaita/wip/exalm/browsing-view: 2/5] header-bar: Pull title from browsing view children




commit cf9ac78182059db87069273dd75f7f4ccf8516e9
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Fri Oct 7 19:20:43 2022 +0400

    header-bar: Pull title from browsing view children

 src/adw-header-bar.c | 46 ++++++++++++++++++++++++++++++++++++----------
 1 file changed, 36 insertions(+), 10 deletions(-)
---
diff --git a/src/adw-header-bar.c b/src/adw-header-bar.c
index 6f60c0fc..fb28d2ce 100644
--- a/src/adw-header-bar.c
+++ b/src/adw-header-bar.c
@@ -23,6 +23,7 @@
 
 #include "adw-header-bar.h"
 
+#include "adw-browsing-view.h"
 #include "adw-enums.h"
 #include "adw-gizmo-private.h"
 #include "adw-macros-private.h"
@@ -161,6 +162,8 @@ struct _AdwHeaderBar {
   gboolean is_mobile_window;
 
   GtkSizeGroup *size_group;
+
+  GtkWidget *browsing_view_child;
 };
 
 enum {
@@ -213,16 +216,20 @@ create_end_window_controls (AdwHeaderBar *self)
 static void
 update_title (AdwHeaderBar *self)
 {
-  GtkRoot *root;
   const char *title = NULL;
 
   if (!self->title_label)
     return;
 
-  root = gtk_widget_get_root (GTK_WIDGET (self));
+  if (self->browsing_view_child)
+    title = adw_browsing_view_child_get_title (ADW_BROWSING_VIEW_CHILD (self->browsing_view_child));
+
+  if (!title) {
+    GtkRoot *root = gtk_widget_get_root (GTK_WIDGET (self));
 
-  if (GTK_IS_WINDOW (root))
-    title = gtk_window_get_title (GTK_WINDOW (root));
+    if (GTK_IS_WINDOW (root))
+      title = gtk_window_get_title (GTK_WINDOW (root));
+  }
 
   if (!title)
     title = g_get_application_name ();
@@ -258,15 +265,25 @@ construct_title_label (AdwHeaderBar *self)
 static void
 adw_header_bar_root (GtkWidget *widget)
 {
-  GtkWidget *root;
+  AdwHeaderBar *self = ADW_HEADER_BAR (widget);
+  GtkWidget *browsing_view_child;
 
   GTK_WIDGET_CLASS (adw_header_bar_parent_class)->root (widget);
 
-  root = GTK_WIDGET (gtk_widget_get_root (widget));
+  browsing_view_child = gtk_widget_get_ancestor (widget, ADW_TYPE_BROWSING_VIEW_CHILD);
 
-  if (GTK_IS_WINDOW (root))
-    g_signal_connect_swapped (root, "notify::title",
+  if (browsing_view_child) {
+    self->browsing_view_child = browsing_view_child;
+
+    g_signal_connect_swapped (browsing_view_child, "notify::title",
                               G_CALLBACK (update_title), widget);
+  } else {
+    GtkRoot *root = gtk_widget_get_root (widget);
+
+    if (GTK_IS_WINDOW (root))
+      g_signal_connect_swapped (root, "notify::title",
+                                G_CALLBACK (update_title), widget);
+  }
 
   update_title (ADW_HEADER_BAR (widget));
 }
@@ -274,8 +291,17 @@ adw_header_bar_root (GtkWidget *widget)
 static void
 adw_header_bar_unroot (GtkWidget *widget)
 {
-  g_signal_handlers_disconnect_by_func (gtk_widget_get_root (widget),
-                                        update_title, widget);
+  AdwHeaderBar *self = ADW_HEADER_BAR (widget);
+
+  if (self->browsing_view_child) {
+    g_signal_handlers_disconnect_by_func (self->browsing_view_child,
+                                          update_title, widget);
+
+    self->browsing_view_child = NULL;
+  } else {
+    g_signal_handlers_disconnect_by_func (gtk_widget_get_root (widget),
+                                          update_title, widget);
+  }
 
   GTK_WIDGET_CLASS (adw_header_bar_parent_class)->unroot (widget);
 }


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