[gnome-todo] manager: add GtdManager:default-task-list property



commit 4f9a1310870133e8ddd8cdb9615a68c6f31f53b8
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Apr 22 10:37:23 2017 -0300

    manager: add GtdManager:default-task-list property
    
    And the auxiliary getter and setter.

 src/engine/gtd-manager.c |  124 ++++++++++++++++++++++++++++++++++++++++++---
 src/engine/gtd-manager.h |    5 ++
 2 files changed, 120 insertions(+), 9 deletions(-)
---
diff --git a/src/engine/gtd-manager.c b/src/engine/gtd-manager.c
index 88e03f2..84ff314 100644
--- a/src/engine/gtd-manager.c
+++ b/src/engine/gtd-manager.c
@@ -82,6 +82,7 @@ enum
 {
   PROP_0,
   PROP_DEFAULT_PROVIDER,
+  PROP_DEFAULT_TASKLIST,
   PROP_PLUGIN_MANAGER,
   LAST_PROP
 };
@@ -99,11 +100,7 @@ check_provider_is_default (GtdManager  *manager,
   default_provider = g_settings_get_string (priv->settings, "default-provider");
 
   if (g_strcmp0 (default_provider, gtd_provider_get_id (provider)) == 0)
-    {
-      g_set_object (&priv->default_provider, provider);
-
-      g_object_notify (G_OBJECT (manager), "default-provider");
-    }
+    gtd_manager_set_default_provider (manager, provider);
 
   g_free (default_provider);
 }
@@ -145,6 +142,10 @@ gtd_manager_get_property (GObject    *object,
       g_value_set_object (value, priv->default_provider);
       break;
 
+    case PROP_DEFAULT_TASKLIST:
+      g_value_set_object (value, gtd_provider_get_default_task_list (priv->default_provider));
+      break;
+
     case PROP_PLUGIN_MANAGER:
       g_value_set_object (value, priv->plugin_manager);
       break;
@@ -160,7 +161,11 @@ gtd_manager_set_property (GObject      *object,
                           const GValue *value,
                           GParamSpec   *pspec)
 {
-  GtdManagerPrivate *priv = gtd_manager_get_instance_private (GTD_MANAGER (object));
+  GtdManagerPrivate *priv;
+  GtdManager *self;
+
+  self = GTD_MANAGER (object);
+  priv = gtd_manager_get_instance_private (self);
 
   switch (prop_id)
     {
@@ -169,6 +174,10 @@ gtd_manager_set_property (GObject      *object,
         g_object_notify (object, "default-provider");
       break;
 
+    case PROP_DEFAULT_TASKLIST:
+      gtd_manager_set_default_task_list (self, g_value_get_object (value));
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -198,6 +207,20 @@ gtd_manager_class_init (GtdManagerClass *klass)
                              G_PARAM_READWRITE));
 
   /**
+   * GtdManager::default-task-list:
+   *
+   * The default provider.
+   */
+  g_object_class_install_property (
+        object_class,
+        PROP_DEFAULT_TASKLIST,
+        g_param_spec_object ("default-task-list",
+                             "The default task list of the application",
+                             "The default task list of the application",
+                             GTD_TYPE_TASK_LIST,
+                             G_PARAM_READWRITE));
+
+  /**
    * GtdManager::plugin-manager:
    *
    * The plugin manager.
@@ -367,6 +390,14 @@ gtd_manager_class_init (GtdManagerClass *klass)
 }
 
 static void
+gtd_manager__default_list_changed_cb (GtdProvider *provider,
+                                      GParamSpec  *pspec,
+                                      GtdManager  *self)
+{
+  g_object_notify (G_OBJECT (self), "default-task-list");
+}
+
+static void
 gtd_manager__task_list_modified (GtdTaskList *list,
                                  GtdTask     *task,
                                  GtdManager  *self)
@@ -507,8 +538,13 @@ gtd_manager__provider_removed (GtdPluginManager *plugin_manager,
   for (l = lists; l != NULL; l = l->next)
     gtd_manager__list_removed (provider, l->data, self);
 
+  g_signal_handlers_disconnect_by_func (provider,
+                                        gtd_manager__default_list_changed_cb,
+                                        self);
+
   g_signal_emit (self, signals[PROVIDER_REMOVED], 0, provider);
 }
+
 static void
 gtd_manager_init (GtdManager *self)
 {
@@ -749,21 +785,23 @@ gtd_manager_get_default_provider (GtdManager *manager)
 }
 
 /**
- * gtd_manager_set_default_storage:
+ * gtd_manager_set_default_provider:
  * @manager: a #GtdManager
- * @default_storage: (nullable): the default storage location.
+ * @provider: (nullable): the default provider.
  *
- * Sets the default storage location id.
+ * Sets the provider.
  */
 void
 gtd_manager_set_default_provider (GtdManager  *manager,
                                   GtdProvider *provider)
 {
   GtdManagerPrivate *priv;
+  GtdProvider *previous;
 
   g_return_if_fail (GTD_IS_MANAGER (manager));
 
   priv = manager->priv;
+  previous = priv->default_provider;
 
   if (g_set_object (&priv->default_provider, provider))
     {
@@ -771,11 +809,79 @@ gtd_manager_set_default_provider (GtdManager  *manager,
                              "default-provider",
                              provider ? gtd_provider_get_id (provider) : "local");
 
+      /* Disconnect the previous provider... */
+      if (previous)
+        {
+          g_signal_handlers_disconnect_by_func (previous,
+                                                gtd_manager__default_list_changed_cb,
+                                                manager);
+        }
+
+      /* ... and connect the current one */
+      if (provider)
+        {
+          g_signal_connect (provider,
+                            "notify::default-task-list",
+                            G_CALLBACK (gtd_manager__default_list_changed_cb),
+                            manager);
+        }
+
       g_object_notify (G_OBJECT (manager), "default-provider");
+      g_object_notify (G_OBJECT (manager), "default-task-list");
     }
 }
 
 /**
+ * gtd_manager_get_default_task_list:
+ * @self: a #GtdManager
+ *
+ * Retrieves the default tasklist of the default provider.
+ *
+ * Returns: (transfer none)(nullable): a #GtdTaskList
+ */
+GtdTaskList*
+gtd_manager_get_default_task_list (GtdManager *self)
+{
+  GtdManagerPrivate *priv;
+
+  g_return_val_if_fail (GTD_IS_MANAGER (self), NULL);
+
+  priv = gtd_manager_get_instance_private (self);
+
+  if (!priv->default_provider)
+    return NULL;
+
+  return gtd_provider_get_default_task_list (priv->default_provider);
+}
+
+/**
+ * gtd_manager_set_default_task_list:
+ * @self: a #GtdManager
+ * @list: (nullable): a #GtdTaskList, or %NULL
+ *
+ * Sets the default task list of the application.
+ */
+void
+gtd_manager_set_default_task_list (GtdManager  *self,
+                                   GtdTaskList *list)
+{
+  g_return_if_fail (GTD_IS_MANAGER (self));
+  g_return_if_fail (GTD_IS_TASK_LIST (list));
+
+  if (list)
+    {
+      GtdProvider *provider;
+
+      provider = gtd_task_list_get_provider (list);
+
+      gtd_manager_set_default_provider (self, provider);
+      gtd_provider_set_default_task_list (provider, list);
+    }
+
+  g_object_notify (G_OBJECT (self), "default-task-list");
+}
+
+/**
  * gtd_manager_get_settings:
  * @manager: a #GtdManager
  *
diff --git a/src/engine/gtd-manager.h b/src/engine/gtd-manager.h
index d2136aa..6e7f12e 100644
--- a/src/engine/gtd-manager.h
+++ b/src/engine/gtd-manager.h
@@ -66,6 +66,11 @@ GtdProvider*            gtd_manager_get_default_provider  (GtdManager
 void                    gtd_manager_set_default_provider  (GtdManager           *manager,
                                                            GtdProvider          *provider);
 
+GtdTaskList*            gtd_manager_get_default_task_list (GtdManager           *self);
+
+void                    gtd_manager_set_default_task_list (GtdManager           *self,
+                                                           GtdTaskList          *list);
+
 GSettings*              gtd_manager_get_settings          (GtdManager           *manager);
 
 gboolean                gtd_manager_get_is_first_run      (GtdManager           *manager);


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