[gnome-todo] window: Toggle archive via actions



commit cfe561da1b0a03e1fd9a87e08f85d6f14be358d9
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sun Jun 9 11:46:24 2019 -0300

    window: Toggle archive via actions

 src/gtd-window.c          | 23 +++++++++++++++++++++++
 src/gtd-window.ui         | 12 +++++++++++-
 src/sidebar/gtd-sidebar.c | 14 +++++++++++++-
 src/sidebar/gtd-sidebar.h |  3 +++
 4 files changed, 50 insertions(+), 2 deletions(-)
---
diff --git a/src/gtd-window.c b/src/gtd-window.c
index 4de4f0f..704df4c 100644
--- a/src/gtd-window.c
+++ b/src/gtd-window.c
@@ -58,9 +58,11 @@ struct _GtdWindow
 {
   GtkApplicationWindow application;
 
+  GtkWidget          *back_button;
   GtkWidget          *cancel_selection_button;
   GtkWidget          *gear_menu_button;
   GtkHeaderBar       *headerbar;
+  GtkWidget          *new_list_button;
   GtkStack           *stack;
   GtdSidebar         *sidebar;
 
@@ -404,6 +406,21 @@ on_action_activate_panel_activated_cb (GSimpleAction *simple,
   gtk_stack_set_visible_child (self->stack, GTK_WIDGET (panel));
 }
 
+static void
+on_action_toggle_archive_activated_cb (GSimpleAction *simple,
+                                       GVariant      *state,
+                                       gpointer       user_data)
+{
+  GtdWindow *self;
+  gboolean archive_visible;
+
+  self = GTD_WINDOW (user_data);
+  archive_visible = g_variant_get_boolean (state);
+
+  gtk_widget_set_visible (self->new_list_button, !archive_visible);
+  gtd_sidebar_set_archive_visible (self->sidebar, archive_visible);
+}
+
 static void
 on_cancel_selection_button_clicked (GtkWidget *button,
                                     GtdWindow *self)
@@ -682,10 +699,12 @@ gtd_window_class_init (GtdWindowClass *klass)
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/todo/ui/gtd-window.ui");
 
+  gtk_widget_class_bind_template_child (widget_class, GtdWindow, back_button);
   gtk_widget_class_bind_template_child (widget_class, GtdWindow, cancel_selection_button);
   gtk_widget_class_bind_template_child (widget_class, GtdWindow, gear_menu_button);
   gtk_widget_class_bind_template_child (widget_class, GtdWindow, headerbar);
   gtk_widget_class_bind_template_child (widget_class, GtdWindow, notification_widget);
+  gtk_widget_class_bind_template_child (widget_class, GtdWindow, new_list_button);
   gtk_widget_class_bind_template_child (widget_class, GtdWindow, sidebar);
   gtk_widget_class_bind_template_child (widget_class, GtdWindow, stack);
 
@@ -704,6 +723,7 @@ gtd_window_init (GtdWindow *self)
 {
   static const GActionEntry entries[] = {
     { "activate-panel", on_action_activate_panel_activated_cb, "(sv)" },
+    { "toggle-archive", on_action_toggle_archive_activated_cb, "b" },
   };
 
   gtk_widget_init_template (GTK_WIDGET (self));
@@ -713,6 +733,9 @@ gtd_window_init (GtdWindow *self)
                                    G_N_ELEMENTS (entries),
                                    self);
 
+  gtk_actionable_set_action_target_value (GTK_ACTIONABLE (self->back_button),
+                                          g_variant_new_boolean (FALSE));
+
   /* Task list panel */
   self->task_list_panel = GTD_PANEL (gtd_task_list_panel_new ());
   on_panel_added_cb (gtd_manager_get_default (), self->task_list_panel, self);
diff --git a/src/gtd-window.ui b/src/gtd-window.ui
index 06bd707..080ca8f 100644
--- a/src/gtd-window.ui
+++ b/src/gtd-window.ui
@@ -46,7 +46,7 @@
         <child>
           <object class="GtkHeaderBar" id="start_headerbar">
             <child>
-              <object class="GtkMenuButton">
+              <object class="GtkMenuButton" id="new_list_button">
                 <property name="can_focus">1</property>
                 <property name="label" translatable="yes">New List</property>
                 <property name="receives_default">1</property>
@@ -54,6 +54,16 @@
                 <property name="halign">start</property>
               </object>
             </child>
+            <child>
+              <object class="GtkButton" id="back_button">
+                <property name="visible" bind-source="new_list_button" bind-property="visible" 
bind-flags="sync-create|invert-boolean" />
+                <property name="can_focus">1</property>
+                <property name="receives_default">1</property>
+                <property name="halign">start</property>
+                <property name="action-name">win.toggle-archive</property>
+                <property name="icon-name">go-previous-symbolic</property>
+              </object>
+            </child>
             <child type="end">
               <object class="GtkMenuButton">
                 <property name="menu-model">app-menu</property>
diff --git a/src/sidebar/gtd-sidebar.c b/src/sidebar/gtd-sidebar.c
index 512aa31..b16761b 100644
--- a/src/sidebar/gtd-sidebar.c
+++ b/src/sidebar/gtd-sidebar.c
@@ -354,7 +354,7 @@ on_listbox_row_activated_cb (GtkListBox    *panels_listbox,
     }
   else if (row == self->archive_row)
     {
-      gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->archive_listbox));
+      gtk_widget_activate_action (GTK_WIDGET (self), "win.toggle-archive", g_variant_new_boolean (TRUE));
     }
   else
     {
@@ -681,3 +681,15 @@ gtd_sidebar_activate (GtdSidebar *self)
   first_row = gtk_list_box_get_row_at_index (self->listbox, 0);
   g_signal_emit_by_name (first_row, "activate");
 }
+
+void
+gtd_sidebar_set_archive_visible (GtdSidebar *self,
+                                 gboolean    show_archive)
+{
+  g_assert (GTD_IS_SIDEBAR (self));
+
+  if (show_archive)
+    gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->archive_listbox));
+  else
+    gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->listbox));
+}
diff --git a/src/sidebar/gtd-sidebar.h b/src/sidebar/gtd-sidebar.h
index 9609865..65b81fc 100644
--- a/src/sidebar/gtd-sidebar.h
+++ b/src/sidebar/gtd-sidebar.h
@@ -38,4 +38,7 @@ void                 gtd_sidebar_set_task_list_panel             (GtdSidebar
 
 void                 gtd_sidebar_activate                        (GtdSidebar         *self);
 
+void                 gtd_sidebar_set_archive_visible             (GtdSidebar         *self,
+                                                                  gboolean            show_archive);
+
 G_END_DECLS


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