[gnome-todo] provider-eds: improve default tasklist handling



commit 082538105bd08a7359077d2569d77aac0fb15421
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Apr 22 11:01:52 2017 -0300

    provider-eds: improve default tasklist handling

 plugins/eds/gtd-provider-eds.c |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/plugins/eds/gtd-provider-eds.c b/plugins/eds/gtd-provider-eds.c
index 1688470..1be1fcb 100644
--- a/plugins/eds/gtd-provider-eds.c
+++ b/plugins/eds/gtd-provider-eds.c
@@ -408,6 +408,26 @@ gtd_provider_eds_credentials_required (ESourceRegistry          *registry,
     }
 }
 
+static void
+default_tasklist_changed_cb (ESourceRegistry *source_registry,
+                             GParamSpec      *pspec,
+                             GtdProviderEds  *self)
+{
+  GtdTaskList *list;
+  ESource *default_source;
+
+  default_source = e_source_registry_ref_default_task_list (source_registry);
+  list = g_object_get_data (G_OBJECT (default_source), "task-list");
+
+  /* The list might not be loaded yet */
+  if (!list)
+    goto out;
+
+  g_object_notify (G_OBJECT (self), "default-task-list");
+
+out:
+  g_clear_object (&default_source);
+}
 
 static void
 gtd_provider_eds_finalize (GObject *object)
@@ -415,6 +435,8 @@ gtd_provider_eds_finalize (GObject *object)
   GtdProviderEds *self = (GtdProviderEds *)object;
   GtdProviderEdsPrivate *priv = gtd_provider_eds_get_instance_private (self);
 
+  g_signal_handlers_disconnect_by_func (priv->source_registry, default_tasklist_changed_cb, self);
+
   g_clear_pointer (&priv->clients, g_hash_table_destroy);
   g_clear_object (&priv->credentials_prompter);
   g_clear_object (&priv->source_registry);
@@ -498,6 +520,11 @@ gtd_provider_eds_load_registry (GtdProviderEds  *provider)
                     G_CALLBACK (gtd_provider_eds_credentials_required),
                     provider);
 
+  g_signal_connect (priv->source_registry,
+                    "notify::default-task-list",
+                    G_CALLBACK (default_tasklist_changed_cb),
+                    provider);
+
   e_credentials_prompter_process_awaiting_credentials (priv->credentials_prompter);
 }
 
@@ -682,6 +709,8 @@ task_list_removal_finished (GtdProvider *provider,
 {
   gtd_object_set_ready (GTD_OBJECT (provider), TRUE);
 
+  g_object_notify (G_OBJECT (provider), "default-task-list");
+
   if (*error)
     {
       g_warning ("%s: %s: %s",


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