[gnome-todo] 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] eds: fix crash when changing default provider
- Date: Fri, 5 May 2017 19:53:29 +0000 (UTC)
commit 8f190f12e6e2f8551168261744e303d4e6ceaec1
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 3345d4c..b7b33e7 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
@@ -424,7 +428,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]