[libadwaita/wip/exalm/browsing-view] hb
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/wip/exalm/browsing-view] hb
- Date: Wed, 12 Oct 2022 03:19:01 +0000 (UTC)
commit 5e7b79a0a3ac874c66ae015beefb56dd341173d3
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Mon Oct 10 20:21:17 2022 +0400
hb
src/adw-header-bar.c | 57 ++++++++++++++++++++++++++++------------------------
1 file changed, 31 insertions(+), 26 deletions(-)
---
diff --git a/src/adw-header-bar.c b/src/adw-header-bar.c
index 1547596f..b579916c 100644
--- a/src/adw-header-bar.c
+++ b/src/adw-header-bar.c
@@ -23,6 +23,7 @@
#include "adw-header-bar.h"
+#include "adw-button-content.h"
#include "adw-browsing-view.h"
#include "adw-enums.h"
#include "adw-gizmo-private.h"
@@ -151,7 +152,6 @@ struct _AdwHeaderBar {
GtkWidget *start_window_controls;
GtkWidget *end_window_controls;
- GtkWidget *back_button;
char *decoration_layout;
@@ -164,8 +164,11 @@ struct _AdwHeaderBar {
GtkSizeGroup *size_group;
+ GtkWidget *back_button;
GtkWidget *browsing_view;
GtkWidget *browsing_view_child;
+ AdwBrowsingViewChild *browsing_view_previous_child;
+ GBinding *back_button_binding;
};
enum {
@@ -218,31 +221,22 @@ create_end_window_controls (AdwHeaderBar *self)
static void
update_back_button (AdwHeaderBar *self)
{
- gboolean has_back_button = FALSE;
- const char *tooltip = NULL;
-
- if (self->browsing_view && self->browsing_view_child) {
- AdwBrowsingViewChild *prev_child;
+ AdwBrowsingViewChild *prev_child = NULL;
- // TODO: if there's a way to edit hsitory at some point, this will need to
- // be updated too
- // TODO: ditto for merging views
- // TODO: need to check can-go-back once it's implemented
- // TODO: track title changes
+ if (self->browsing_view && self->browsing_view_child)
prev_child = adw_browsing_view_get_previous_child (ADW_BROWSING_VIEW (self->browsing_view),
ADW_BROWSING_VIEW_CHILD (self->browsing_view_child));
+ if (prev_child == self->browsing_view_previous_child)
+ return;
- has_back_button = !!prev_child;
-
- if (prev_child)
- tooltip = adw_browsing_view_child_get_title (prev_child);
- }
+ self->browsing_view_previous_child = prev_child;
- if (has_back_button) {
+ if (prev_child) {
if (!self->back_button) {
self->back_button = gtk_button_new_from_icon_name ("go-previous-symbolic");
+ gtk_widget_add_css_class (self->back_button, "back-button");
gtk_actionable_set_action_name (GTK_ACTIONABLE (self->back_button), "browsing.pop");
gtk_box_insert_child_after (GTK_BOX (self->start_box),
@@ -250,12 +244,16 @@ update_back_button (AdwHeaderBar *self)
self->start_window_controls);
}
- gtk_widget_set_tooltip_text (self->back_button, tooltip);
- } else {
- if (self->back_button)
- gtk_box_remove (GTK_BOX (self->start_box), self->back_button);
-
+ g_clear_pointer (&self->back_button_binding, g_binding_unbind);
+ self->back_button_binding =
+ g_object_bind_property (prev_child, "title",
+ self->back_button, "tooltip-text",
+ G_BINDING_SYNC_CREATE);
+ } else if (self->back_button) {
+ gtk_box_remove (GTK_BOX (self->start_box), self->back_button);
self->back_button = NULL;
+ self->browsing_view_previous_child = NULL;
+ self->back_button_binding = NULL;
}
}
@@ -309,7 +307,7 @@ construct_title_label (AdwHeaderBar *self)
}
static void
-browsing_view_visible_child_cb (AdwHeaderBar *self)
+browsing_view_pushed_cb (AdwHeaderBar *self)
{
AdwBrowsingViewChild *visible_child;
@@ -338,12 +336,17 @@ adw_header_bar_root (GtkWidget *widget)
if (!ADW_IS_BROWSING_VIEW (browsing_view))
browsing_view = NULL;
+ // TODO: if there's a way to edit hsitory at some point, this will need to
+ // be updated too
+ // TODO: ditto for merging views
+ // TODO: need to check can-go-back once it's implemented
+
if (browsing_view && browsing_view_child) {
self->browsing_view = browsing_view;
self->browsing_view_child = browsing_view_child;
- g_signal_connect_swapped (browsing_view, "notify::visible-child",
- G_CALLBACK (browsing_view_visible_child_cb), widget);
+ g_signal_connect_swapped (browsing_view, "pushed",
+ G_CALLBACK (browsing_view_pushed_cb), widget);
g_signal_connect_swapped (browsing_view_child, "notify::title",
G_CALLBACK (update_title), widget);
} else {
@@ -365,12 +368,14 @@ adw_header_bar_unroot (GtkWidget *widget)
if (self->browsing_view && self->browsing_view_child) {
g_signal_handlers_disconnect_by_func (self->browsing_view,
- browsing_view_visible_child_cb, widget);
+ browsing_view_pushed_cb, widget);
g_signal_handlers_disconnect_by_func (self->browsing_view_child,
update_title, widget);
self->browsing_view = NULL;
self->browsing_view_child = NULL;
+
+ update_back_button (self);
} else {
g_signal_handlers_disconnect_by_func (gtk_widget_get_root (widget),
update_title, widget);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]