[gnome-todo/wip/gbsneto/plugins] project: bring back gear menu
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo/wip/gbsneto/plugins] project: bring back gear menu
- Date: Tue, 5 Jan 2016 21:50:41 +0000 (UTC)
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]