[gnome-todo/wip/selection-mode] manager: correctly remove task lists
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo/wip/selection-mode] manager: correctly remove task lists
- Date: Sun, 23 Aug 2015 00:35:31 +0000 (UTC)
commit 5ead698e30d77bc7cd3d4b034109c0d8d86435c9
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Aug 22 19:50:07 2015 -0300
manager: correctly remove task lists
When the task list is remote-deletable, it is preferred to
locally remove the task list. As such, adapt the current
code to correctly remove task lists.
src/gtd-manager.c | 79 ++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 57 insertions(+), 22 deletions(-)
---
diff --git a/src/gtd-manager.c b/src/gtd-manager.c
index ed3cec3..2c6a024 100644
--- a/src/gtd-manager.c
+++ b/src/gtd-manager.c
@@ -409,34 +409,53 @@ gtd_manager__commit_source_finished (GObject *registry,
}
static void
-gtd_manager__remove_source_finished (GObject *source,
+task_list_removal_finished (GtdManager *manager,
+ ESource *source,
+ GError **error)
+{
+ gtd_object_set_ready (GTD_OBJECT (manager), TRUE);
+
+ if (*error)
+ {
+ g_warning ("%s: %s: %s",
+ G_STRFUNC,
+ _("Error removing task list"),
+ (*error)->message);
+
+ g_clear_error (error);
+ }
+}
+
+static void
+gtd_manager__remote_delete_finished (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- GtdManagerPrivate *priv = GTD_MANAGER (user_data)->priv;
GError *error = NULL;
- g_return_if_fail (GTD_IS_MANAGER (user_data));
+ e_source_remote_delete_finish (E_SOURCE (source),
+ result,
+ &error);
+
+ task_list_removal_finished (GTD_MANAGER (user_data),
+ E_SOURCE (source),
+ &error);
+}
+
+static void
+gtd_manager__remove_source_finished (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GError *error = NULL;
- gtd_object_set_ready (GTD_OBJECT (user_data), TRUE);
e_source_remove_finish (E_SOURCE (source),
result,
&error);
- if (error)
- {
- g_warning ("%s: %s: %s",
- G_STRFUNC,
- _("Error removing task list"),
- error->message);
-
- g_error_free (error);
- return;
- }
- else
- {
- priv->task_lists = g_list_remove (priv->task_lists, source);
- }
+ task_list_removal_finished (GTD_MANAGER (user_data),
+ E_SOURCE (source),
+ &error);
}
static void
@@ -1367,10 +1386,26 @@ gtd_manager_remove_task_list (GtdManager *manager,
source = gtd_task_list_get_source (list);
gtd_object_set_ready (GTD_OBJECT (manager), FALSE);
- e_source_remove (source,
- NULL,
- (GAsyncReadyCallback) gtd_manager__remove_source_finished,
- manager);
+
+ if (e_source_get_remote_deletable (source))
+ {
+ e_source_remote_delete (source,
+ NULL,
+ (GAsyncReadyCallback) gtd_manager__remote_delete_finished,
+ manager);
+ }
+ else
+ {
+ e_source_remove (source,
+ NULL,
+ (GAsyncReadyCallback) gtd_manager__remove_source_finished,
+ manager);
+ }
+
+ g_signal_emit (manager,
+ signals[LIST_REMOVED],
+ 0,
+ list);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]