[gnome-todo] manager: Add filtered tasks model by default
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] manager: Add filtered tasks model by default
- Date: Sun, 30 Jun 2019 00:52:21 +0000 (UTC)
commit b700768c3e1e84c2a2c59e7ba7a6a2ede5100db8
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Jun 29 20:35:18 2019 -0300
manager: Add filtered tasks model by default
Archived task lists should not show their tasks in the
regular panels. However, as it is right now, we are
passing all tasks, even from archived task lists, as
the tasks model.
Add an filtered tasks model, removing tasks from archived
lists, and make it the default. Also add another function
to retrieve all tasks, even from archived lists.
src/engine/gtd-manager.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
src/engine/gtd-manager.h | 2 ++
2 files changed, 49 insertions(+), 1 deletion(-)
---
diff --git a/src/engine/gtd-manager.c b/src/engine/gtd-manager.c
index 936feef..6c9c493 100644
--- a/src/engine/gtd-manager.c
+++ b/src/engine/gtd-manager.c
@@ -58,6 +58,7 @@ struct _GtdManager
GListModel *lists_model;
GListModel *tasks_model;
+ GListModel *unarchived_tasks_model;
GList *providers;
GList *panels;
@@ -120,6 +121,19 @@ check_provider_is_default (GtdManager *self,
* Callbacks
*/
+static gboolean
+filter_achived_lists_func (gpointer item,
+ gpointer user_data)
+{
+ GtdTaskList *list;
+ GtdTask *task;
+
+ task = (GtdTask*) item;
+ list = gtd_task_get_list (task);
+
+ return !gtd_task_list_get_archived (list);
+}
+
static gint
compare_lists_cb (GtdTaskList *list_a,
GtdTaskList *list_b,
@@ -209,6 +223,8 @@ on_list_changed_cb (GtdProvider *provider,
(GCompareDataFunc) compare_lists_cb,
self);
+ gtk_filter_list_model_refilter (GTK_FILTER_LIST_MODEL (self->unarchived_tasks_model));
+
g_signal_emit (self, signals[LIST_CHANGED], 0, list);
}
@@ -305,6 +321,7 @@ gtd_manager_finalize (GObject *object)
g_clear_object (&self->plugin_manager);
g_clear_object (&self->settings);
g_clear_object (&self->clock);
+ g_clear_object (&self->unarchived_tasks_model);
g_clear_object (&self->lists_model);
G_OBJECT_CLASS (gtd_manager_parent_class)->finalize (object);
@@ -617,6 +634,10 @@ gtd_manager_init (GtdManager *self)
self->cancellable = g_cancellable_new ();
self->lists_model = (GListModel*) gtd_list_store_new (GTD_TYPE_TASK_LIST);
self->tasks_model = (GListModel*) _gtd_task_model_new (self);
+ self->unarchived_tasks_model = (GListModel*) gtk_filter_list_model_new (self->tasks_model,
+ filter_achived_lists_func,
+ self,
+ NULL);
}
/**
@@ -912,6 +933,27 @@ gtd_manager_get_task_lists_model (GtdManager *self)
return self->lists_model;
}
+
+/**
+ * gtd_manager_get_all_tasks_model:
+ * @self: a #GtdManager
+ *
+ * Retrieves the #GListModel containing #GtdTasks from
+ * @self. You can use the this model to bind to GtkListBox
+ * or other widgets.
+ *
+ * The model is sorted.
+ *
+ * Returns: (transfer none): a #GListModel
+ */
+GListModel*
+gtd_manager_get_all_tasks_model (GtdManager *self)
+{
+ g_return_val_if_fail (GTD_IS_MANAGER (self), NULL);
+
+ return self->tasks_model;
+}
+
/**
* gtd_manager_get_tasks_model:
* @self: a #GtdManager
@@ -920,6 +962,10 @@ gtd_manager_get_task_lists_model (GtdManager *self)
* @self. You can use the this model to bind to GtkListBox
* or other widgets.
*
+ * The model returned by this function is filtered to only
+ * contain tasks from unarchived lists. If you need all tasks,
+ * see gtd_manager_get_all_tasks_model().
+ *
* The model is sorted.
*
* Returns: (transfer none): a #GListModel
@@ -929,7 +975,7 @@ gtd_manager_get_tasks_model (GtdManager *self)
{
g_return_val_if_fail (GTD_IS_MANAGER (self), NULL);
- return self->tasks_model;
+ return self->unarchived_tasks_model;
}
void
diff --git a/src/engine/gtd-manager.h b/src/engine/gtd-manager.h
index c8661b3..27efc83 100644
--- a/src/engine/gtd-manager.h
+++ b/src/engine/gtd-manager.h
@@ -74,6 +74,8 @@ GtdClock* gtd_manager_get_clock (GtdManager
GListModel* gtd_manager_get_task_lists_model (GtdManager *self);
+GListModel* gtd_manager_get_all_tasks_model (GtdManager *self);
+
GListModel* gtd_manager_get_tasks_model (GtdManager *self);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]