[anjal] Sync before we quit.



commit 91c964555347c41edd2589b3666c2e4be7d0cb6f
Author: Srinivasa Ragavan <sragavan gnome org>
Date:   Tue Jan 5 00:49:36 2010 +0530

    Sync before we quit.

 src/module/anjal-shell-view-private.c |   44 +++++++++++++++++++++++++++++++++
 src/module/anjal-shell-view-private.h |    3 ++
 2 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/src/module/anjal-shell-view-private.c b/src/module/anjal-shell-view-private.c
index b7108cc..a48784e 100644
--- a/src/module/anjal-shell-view-private.c
+++ b/src/module/anjal-shell-view-private.c
@@ -153,6 +153,40 @@ anjal_shell_view_private_init (AnjalShellView *mail_shell_view,
 
 }
 
+static void
+mail_shell_view_prepare_for_quit_done_cb (CamelFolder *folder,
+                                          gpointer user_data)
+{
+	g_object_unref (E_ACTIVITY (user_data));
+}
+
+static void
+mail_shell_view_prepare_for_quit_cb (AnjalShellView *mail_shell_view,
+                                     EActivity *activity)
+{
+	CamelFolder *folder;
+	AnjalShellSidebar *mail_shell_sidebar;
+	EMFolderTree *folder_tree;
+	
+	mail_shell_sidebar = mail_shell_view->priv->mail_shell_sidebar;
+	folder_tree = anjal_shell_sidebar_get_folder_tree (mail_shell_sidebar);
+	folder = em_folder_tree_get_selected_folder (folder_tree);
+
+	/* If we got here, it means the application is shutting down
+	 * and this is the last EMailShellView instance.  Synchronize
+	 * the currently selected folder before we terminate. */
+
+
+	if (folder == NULL)
+		return;
+
+	mail_sync_folder (
+		folder,
+		mail_shell_view_prepare_for_quit_done_cb,
+		g_object_ref (activity));
+}
+
+
 void
 anjal_shell_view_private_constructed (AnjalShellView *mail_shell_view)
 {
@@ -237,6 +271,16 @@ anjal_shell_view_private_constructed (AnjalShellView *mail_shell_view)
 	anjal_shell_view_actions_init (mail_shell_view);
 	anjal_shell_view_update_search_filter (mail_shell_view);
 
+	/* Need to keep the handler ID so we can disconnect it in
+	 * dispose().  The shell outlives us and we don't want it
+	 * invoking callbacks on finalized shell views. */
+	priv->prepare_for_quit_handler_id =
+		g_signal_connect_swapped (
+			shell, "prepare-for-quit",
+			G_CALLBACK 
+			(mail_shell_view_prepare_for_quit_cb),
+			mail_shell_view);
+
 	/* Populate built-in rules for search entry popup menu.
 	 * Keep the assertions, please.  If the conditions aren't
 	 * met we're going to crash anyway, just more mysteriously. */
diff --git a/src/module/anjal-shell-view-private.h b/src/module/anjal-shell-view-private.h
index 0204d24..53b3226 100644
--- a/src/module/anjal-shell-view-private.h
+++ b/src/module/anjal-shell-view-private.h
@@ -144,6 +144,9 @@ struct _AnjalShellViewPrivate {
 	/* Filter rules correspond to the search entry menu. */
 	EFilterRule *search_rules[MAIL_NUM_SEARCH_RULES];
 
+	/* EShell::prepare-for-quit */
+	gulong prepare_for_quit_handler_id;
+	
 	guint show_deleted : 1;
 
 	AnjalMailView *view;



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