[gnome-software: 17/29] gs-shell: Bind GsPage:title to application_details_header:label
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software: 17/29] gs-shell: Bind GsPage:title to application_details_header:label
- Date: Wed, 31 Mar 2021 16:03:46 +0000 (UTC)
commit 3a6d59191c71da09f8848588abd4784f62e9cf3f
Author: Philip Withnall <pwithnall endlessos org>
Date: Thu Jan 21 11:53:50 2021 +0000
gs-shell: Bind GsPage:title to application_details_header:label
This allows a fair amount of manual widget update code to be removed
from individual `GsPage` implementations, while retaining the same
functionality.
Signed-off-by: Philip Withnall <pwithnall endlessos org>
src/gnome-software.ui | 2 +-
src/gs-category-page.c | 12 ------------
src/gs-details-page.c | 15 ---------------
src/gs-extras-page.c | 9 ---------
src/gs-shell.c | 14 ++++++++++++--
5 files changed, 13 insertions(+), 39 deletions(-)
---
diff --git a/src/gnome-software.ui b/src/gnome-software.ui
index 995fa3790..542c7b7c1 100644
--- a/src/gnome-software.ui
+++ b/src/gnome-software.ui
@@ -171,7 +171,7 @@
</child>
<child>
<object class="GtkLabel" id="application_details_header">
- <property name="visible">False</property>
+ <property name="visible">True</property>
<property name="selectable">False</property>
<property name="ellipsize">end</property>
<style>
diff --git a/src/gs-category-page.c b/src/gs-category-page.c
index 78606fa33..e6e51c9b4 100644
--- a/src/gs-category-page.c
+++ b/src/gs-category-page.c
@@ -61,17 +61,6 @@ typedef enum {
PROP_TITLE = 1,
} GsCategoryPageProperty;
-static void
-gs_category_page_switch_to (GsPage *page)
-{
- GsCategoryPage *self = GS_CATEGORY_PAGE (page);
- GtkWidget *widget;
-
- widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
- gtk_widget_show (widget);
- gtk_label_set_label (GTK_LABEL (widget), gs_page_get_title (page));
-}
-
static void
app_tile_clicked (GsAppTile *tile, gpointer data)
{
@@ -590,7 +579,6 @@ gs_category_page_class_init (GsCategoryPageClass *klass)
object_class->get_property = gs_category_page_get_property;
object_class->dispose = gs_category_page_dispose;
- page_class->switch_to = gs_category_page_switch_to;
page_class->reload = gs_category_page_reload;
page_class->setup = gs_category_page_setup;
diff --git a/src/gs-details-page.c b/src/gs-details-page.c
index a4b266133..b777b6005 100644
--- a/src/gs-details-page.c
+++ b/src/gs-details-page.c
@@ -292,16 +292,6 @@ app_has_pending_action (GsApp *app)
(gs_app_get_state (app) == GS_APP_STATE_QUEUED_FOR_INSTALL);
}
-static void
-gs_details_page_update_header_label (GsDetailsPage *self)
-{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
- gtk_label_set_label (GTK_LABEL (widget), gs_page_get_title (GS_PAGE (self)));
- gtk_widget_set_visible (widget, gtk_label_get_label (GTK_LABEL (widget)) != NULL);
-}
-
static void
gs_details_page_switch_to (GsPage *page)
{
@@ -318,8 +308,6 @@ gs_details_page_switch_to (GsPage *page)
if (self->app == NULL)
return;
- gs_details_page_update_header_label (self);
-
adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolledwindow_details));
gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
@@ -1222,7 +1210,6 @@ gs_details_page_refresh_all (GsDetailsPage *self)
/* change widgets */
tmp = gs_app_get_name (self->app);
- gs_details_page_update_header_label (self);
if (tmp != NULL && tmp[0] != '\0') {
gtk_label_set_label (GTK_LABEL (self->application_details_title), tmp);
gtk_widget_set_visible (self->application_details_title, TRUE);
@@ -2117,7 +2104,6 @@ gs_details_page_set_local_file (GsDetailsPage *self, GFile *file)
gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_LOADING);
g_clear_object (&self->app_local_file);
g_clear_object (&self->app);
- gs_details_page_update_header_label (self);
plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_FILE_TO_APP,
"file", file,
"refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
@@ -2152,7 +2138,6 @@ gs_details_page_set_url (GsDetailsPage *self, const gchar *url)
gs_details_page_set_state (self, GS_DETAILS_PAGE_STATE_LOADING);
g_clear_object (&self->app_local_file);
g_clear_object (&self->app);
- gs_details_page_update_header_label (self);
plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_URL_TO_APP,
"search", url,
"refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_ICON |
diff --git a/src/gs-extras-page.c b/src/gs-extras-page.c
index 736ced3bb..2a6344db6 100644
--- a/src/gs-extras-page.c
+++ b/src/gs-extras-page.c
@@ -194,7 +194,6 @@ build_title (GsExtrasPage *self)
static void
gs_extras_page_update_ui_state (GsExtrasPage *self)
{
- GtkWidget *widget;
g_autofree gchar *title = NULL;
if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_EXTRAS)
@@ -215,10 +214,6 @@ gs_extras_page_update_ui_state (GsExtrasPage *self)
break;
}
- /* headerbar title */
- widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
- gtk_label_set_label (GTK_LABEL (widget), gs_page_get_title (GS_PAGE (self)));
-
/* stack */
switch (self->state) {
case GS_EXTRAS_PAGE_STATE_LOADING:
@@ -1092,7 +1087,6 @@ static void
gs_extras_page_switch_to (GsPage *page)
{
GsExtrasPage *self = GS_EXTRAS_PAGE (page);
- GtkWidget *widget;
if (gs_shell_get_mode (self->shell) != GS_SHELL_MODE_EXTRAS) {
g_warning ("Called switch_to(codecs) when in mode %s",
@@ -1100,9 +1094,6 @@ gs_extras_page_switch_to (GsPage *page)
return;
}
- widget = GTK_WIDGET (gtk_builder_get_object (self->builder, "application_details_header"));
- gtk_widget_show (widget);
-
gs_extras_page_update_ui_state (self);
}
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 84b1fa26e..c9bbb976d 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -75,6 +75,8 @@ struct _GsShell
GtkStack *stack_main;
GsPage *page;
+ GBinding *application_details_header_binding;
+
#ifdef HAVE_MOGWAI
MwscScheduler *scheduler;
gboolean scheduler_held;
@@ -420,8 +422,6 @@ stack_notify_visible_child_cb (GObject *object,
/* hide all mode specific header widgets here, they will be shown in the
* refresh functions
*/
- widget = GTK_WIDGET (gtk_builder_get_object (shell->builder, "application_details_header"));
- gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (shell->builder, "buttonbox_main"));
gtk_widget_hide (widget);
widget = GTK_WIDGET (gtk_builder_get_object (shell->builder, "menu_button"));
@@ -431,6 +431,8 @@ stack_notify_visible_child_cb (GObject *object,
widget = GTK_WIDGET (gtk_builder_get_object (shell->builder, "origin_box"));
gtk_widget_hide (widget);
+ gtk_widget_set_visible (shell->application_details_header, !buttonbox_visible);
+
/* only show the search button in overview and search pages */
search_button = GTK_WIDGET (gtk_builder_get_object (shell->builder, "search_button"));
g_signal_handlers_block_by_func (search_button, search_button_clicked_cb, shell);
@@ -493,6 +495,12 @@ stack_notify_visible_child_cb (GObject *object,
widget = gs_page_get_header_end_widget (page);
gs_shell_set_header_end_widget (shell, widget);
+ widget = GTK_WIDGET (gtk_builder_get_object (shell->builder, "application_details_header"));
+ g_clear_object (&shell->application_details_header_binding);
+ shell->application_details_header_binding = g_object_bind_property (page, "title",
+ widget, "label",
+ G_BINDING_SYNC_CREATE);
+
/* refresh the updates bar when moving out of the loading mode, but only
* if the Mogwai scheduler state is already known, to avoid spuriously
* showing the updates bar */
@@ -2424,6 +2432,8 @@ gs_shell_dispose (GObject *object)
{
GsShell *shell = GS_SHELL (object);
+ g_clear_object (&shell->application_details_header_binding);
+
if (shell->back_entry_stack != NULL) {
g_queue_free_full (shell->back_entry_stack, (GDestroyNotify) free_back_entry);
shell->back_entry_stack = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]