[gnome-todo/gnome-3-24] eds: fix crash when changing default provider
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo/gnome-3-24] eds: fix crash when changing default provider
- Date: Fri, 5 May 2017 19:53:19 +0000 (UTC)
commit 0c89621dad14db7f1af2442ae1fb78c7f7c0ad16
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri May 5 16:38:56 2017 -0300
eds: fix crash when changing default provider
When we change the default ESource in ESourceRegistry, it
emits a notify:: signal that we listen to. The problem is
that many GtdProviderEds instances were listening to the
same ESourceRegistry signal, without checking the if the
provider is itself.
This leads to a crash when selecting a tasklist from another
provider than the default. For example, by creating a new task
at an Online Account list, when the default is the local one.
Fix that by always checking if the provider of the new default
task list is itself, and adjusting the order of methods when
setting the default task list.
plugins/eds/gtd-provider-eds.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/plugins/eds/gtd-provider-eds.c b/plugins/eds/gtd-provider-eds.c
index f8ea74e..f5c0788 100644
--- a/plugins/eds/gtd-provider-eds.c
+++ b/plugins/eds/gtd-provider-eds.c
@@ -78,13 +78,17 @@ gtd_provider_eds_set_default (GtdProviderEds *self,
GtdTaskList *list)
{
GtdProviderEdsPrivate *priv;
+ GtdManager *manager;
ESource *source;
priv = gtd_provider_eds_get_instance_private (self);
source = gtd_task_list_eds_get_source (GTD_TASK_LIST_EDS (list));
+ manager = gtd_manager_get_default ();
- gtd_manager_set_default_provider (gtd_manager_get_default (), GTD_PROVIDER (self));
e_source_registry_set_default_task_list (priv->source_registry, source);
+
+ if (gtd_manager_get_default_provider (manager) != (GtdProvider*) self)
+ gtd_manager_set_default_provider (manager, GTD_PROVIDER (self));
}
static void
@@ -420,7 +424,7 @@ default_tasklist_changed_cb (ESourceRegistry *source_registry,
list = g_object_get_data (G_OBJECT (default_source), "task-list");
/* The list might not be loaded yet */
- if (!list)
+ if (!list || gtd_task_list_get_provider (list) != (GtdProvider*) self)
goto out;
g_object_notify (G_OBJECT (self), "default-task-list");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]