[libadwaita/wip/exalm/browsing-view: 2/5] header-bar: Pull title from browsing view children
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/wip/exalm/browsing-view: 2/5] header-bar: Pull title from browsing view children
- Date: Sat, 8 Oct 2022 22:17:25 +0000 (UTC)
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]