[gnome-todo/wip/gbsneto/plugins] project: bring back gear menu



commit e872aa280cfdcb9fa11db322923eb6092842a8c3
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Tue Jan 5 19:21:04 2016 -0200

    project: bring back gear menu
    
    This commit brings back the old gear menu
    that used to have the "Clear completed tasks"
    entry.

 data/gtk/menus.ui                   |    8 -------
 data/ui/window.ui                   |    1 +
 plugins/eds/gtd-panel-scheduled.c   |   14 +++++++++++-
 plugins/eds/gtd-panel-today.c       |   13 ++++++++++-
 src/gtd-window.c                    |   38 +++++++++++++++++++++++++++++++++++
 src/views/gtd-list-selector-panel.c |   19 +++++++++++++++-
 6 files changed, 79 insertions(+), 14 deletions(-)
---
diff --git a/data/gtk/menus.ui b/data/gtk/menus.ui
index 854f37e..d312903 100644
--- a/data/gtk/menus.ui
+++ b/data/gtk/menus.ui
@@ -27,12 +27,4 @@
       </item>
     </section>
   </menu>
-  <menu id="gear-menu">
-    <section>
-      <item>
-        <attribute name="label" translatable="yes">Clear completed tasks…</attribute>
-        <attribute name="action">list.clear-completed-tasks</attribute>
-      </item>
-    </section>
-  </menu>
 </interface>
diff --git a/data/ui/window.ui b/data/ui/window.ui
index 1a60fa5..0004a56 100644
--- a/data/ui/window.ui
+++ b/data/ui/window.ui
@@ -66,6 +66,7 @@
         </child>
         <child>
           <object class="GtkMenuButton" id="gear_menu_button">
+            <property name="visible">True</property>
             <property name="can_focus">True</property>
             <style>
               <class name="image-button" />
diff --git a/plugins/eds/gtd-panel-scheduled.c b/plugins/eds/gtd-panel-scheduled.c
index cfb0e55..5965049 100644
--- a/plugins/eds/gtd-panel-scheduled.c
+++ b/plugins/eds/gtd-panel-scheduled.c
@@ -25,6 +25,8 @@ struct _GtdPanelScheduled
 {
   GtkBox              parent;
 
+  GMenu              *menu;
+
   gchar              *title;
   guint               number_of_tasks;
   GtdTaskList        *task_list;
@@ -99,7 +101,9 @@ gtd_panel_scheduled_count_tasks (GtdPanelScheduled *panel)
           if (task_dt)
             {
               gtd_task_list_save_task (panel->task_list, t->data);
-              number_of_tasks++;
+
+              if (!gtd_task_get_complete (t->data))
+                number_of_tasks++;
             }
 
           g_clear_pointer (&task_dt, g_date_time_unref);
@@ -155,7 +159,7 @@ gtd_panel_scheduled_get_header_widgets (GtdPanel *panel)
 static const GMenu*
 gtd_panel_scheduled_get_menu (GtdPanel *panel)
 {
-  return NULL;
+  return GTD_PANEL_SCHEDULED (panel)->menu;
 }
 
 static void
@@ -261,6 +265,12 @@ gtd_panel_scheduled_init (GtdPanelScheduled *self)
   /* Task list */
   self->task_list = gtd_task_list_new (NULL);
 
+  /* Menu */
+  self->menu = g_menu_new ();
+  g_menu_append (self->menu,
+                 _("Clear completed tasks…"),
+                 "list.clear-completed-tasks");
+
   /* The main view */
   self->view = gtd_task_list_view_new ();
   gtd_task_list_view_set_show_list_name (GTD_TASK_LIST_VIEW (self->view), TRUE);
diff --git a/plugins/eds/gtd-panel-today.c b/plugins/eds/gtd-panel-today.c
index bc07868..fdaf231 100644
--- a/plugins/eds/gtd-panel-today.c
+++ b/plugins/eds/gtd-panel-today.c
@@ -26,6 +26,7 @@ struct _GtdPanelToday
   GtkBox              parent;
 
   GtkWidget          *view;
+  GMenu              *menu;
 
   gint                day_change_callback_id;
 
@@ -125,7 +126,9 @@ gtd_panel_today_count_tasks (GtdPanelToday *panel)
           if (is_today (task_dt))
             {
               gtd_task_list_save_task (panel->task_list, t->data);
-              number_of_tasks++;
+
+              if (!gtd_task_get_complete (t->data))
+                number_of_tasks++;
             }
 
           g_clear_pointer (&task_dt, g_date_time_unref);
@@ -213,7 +216,7 @@ gtd_panel_today_get_header_widgets (GtdPanel *panel)
 static const GMenu*
 gtd_panel_today_get_menu (GtdPanel *panel)
 {
-  return NULL;
+  return GTD_PANEL_TODAY (panel)->menu;
 }
 
 static void
@@ -319,6 +322,12 @@ gtd_panel_today_init (GtdPanelToday *self)
   /* Task list */
   self->task_list = gtd_task_list_new (NULL);
 
+  /* Menu */
+  self->menu = g_menu_new ();
+  g_menu_append (self->menu,
+                 _("Clear completed tasks…"),
+                 "list.clear-completed-tasks");
+
   /* The main view */
   self->view = gtd_task_list_view_new ();
   gtd_task_list_view_set_show_list_name (GTD_TASK_LIST_VIEW (self->view), TRUE);
diff --git a/src/gtd-window.c b/src/gtd-window.c
index ada465b..08774b8 100644
--- a/src/gtd-window.c
+++ b/src/gtd-window.c
@@ -91,6 +91,30 @@ typedef struct
 } ErrorData;
 
 static void
+update_panel_menu (GtdWindow *window)
+{
+  GtdWindowPrivate *priv = gtd_window_get_instance_private (window);
+  const GMenu *menu;
+
+  menu = gtd_panel_get_menu (priv->active_panel);
+
+  gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (priv->gear_menu_button), G_MENU_MODEL (menu));
+}
+
+static void
+gtd_window__panel_menu_changed (GObject    *object,
+                                GParamSpec *pspec,
+                                GtdWindow  *window)
+{
+  GtdWindowPrivate *priv = gtd_window_get_instance_private (window);
+
+  if (GTD_PANEL (object) != priv->active_panel)
+    return;
+
+  update_panel_menu (window);
+}
+
+static void
 gtd_window__panel_title_changed (GObject    *object,
                                  GParamSpec *pspec,
                                  GtdWindow  *window)
@@ -308,6 +332,11 @@ gtd_window__stack_visible_child_cb (GtdWindow  *window,
     {
       header_widgets = gtd_panel_get_header_widgets (priv->active_panel);
 
+      /* Disconnect signals */
+      g_signal_handlers_disconnect_by_func (priv->active_panel,
+                                            gtd_window__panel_menu_changed,
+                                            window);
+
       for (l = header_widgets; l != NULL; l = l->next)
         gtk_container_remove (GTK_CONTAINER (priv->headerbar), l->data);
 
@@ -343,8 +372,16 @@ gtd_window__stack_visible_child_cb (GtdWindow  *window,
 
   g_list_free (header_widgets);
 
+  g_signal_connect (panel,
+                    "notify::menu",
+                    G_CALLBACK (gtd_window__panel_menu_changed),
+                    window);
+
   /* Set panel as the new active panel */
   g_set_object (&priv->active_panel, panel);
+
+  /* Setup the panel's menu */
+  update_panel_menu (window);
 }
 
 /*
@@ -780,6 +817,7 @@ gtd_window_set_mode (GtdWindow     *window,
       context = gtk_widget_get_style_context (GTK_WIDGET (priv->headerbar));
       is_selection_mode = (mode == GTD_WINDOW_MODE_SELECTION);
 
+      gtk_widget_set_visible (priv->gear_menu_button, !is_selection_mode);
       gtk_widget_set_visible (priv->cancel_selection_button, is_selection_mode);
       gtk_header_bar_set_show_close_button (priv->headerbar, !is_selection_mode);
       gtk_header_bar_set_subtitle (priv->headerbar, NULL);
diff --git a/src/views/gtd-list-selector-panel.c b/src/views/gtd-list-selector-panel.c
index 6a4752c..c5f7486 100644
--- a/src/views/gtd-list-selector-panel.c
+++ b/src/views/gtd-list-selector-panel.c
@@ -38,6 +38,7 @@ struct _GtdListSelectorPanel
   GtkWidget          *tasklist_view;
 
   GtkWidget          *grid_selector;
+  GMenu              *menu;
 
   /* Action bar widgets */
   GtkWidget          *actionbar;
@@ -204,6 +205,8 @@ gtd_list_selector_panel_list_selected (GtdListSelector      *selector,
                                          panel);
 
       gdk_rgba_free (list_color);
+
+      g_object_notify (G_OBJECT (panel), "menu");
       break;
 
     default:
@@ -227,6 +230,8 @@ gtd_list_selector_panel_back_button_clicked (GtkButton            *button,
   gtk_widget_hide (panel->color_button);
 
   gtd_window_set_custom_title (window, NULL, NULL);
+
+  g_object_notify (G_OBJECT (panel), "menu");
 }
 
 static void
@@ -380,8 +385,12 @@ gtd_list_selector_panel_get_header_widgets (GtdPanel *panel)
 static const GMenu*
 gtd_list_selector_panel_get_menu (GtdPanel *panel)
 {
-  /* TODO: add a menu for GtdListSelectorPanel */
-  return NULL;
+  if (g_strcmp0 (gtk_stack_get_visible_child_name (GTK_STACK (panel)), "lists") == 0)
+    {
+      return NULL;
+    }
+
+  return GTD_LIST_SELECTOR_PANEL (panel)->menu;
 }
 
 static const gchar*
@@ -580,6 +589,12 @@ gtd_list_selector_panel_init (GtdListSelectorPanel *self)
                         self->grid_selector,
                         "grid",
                         "Grid");
+
+  /* Menu */
+  self->menu = g_menu_new ();
+  g_menu_append (self->menu,
+                 _("Clear completed tasks…"),
+                 "list.clear-completed-tasks");
 }
 
 GtkWidget*


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