[anjal] Save architecture for saving/restoring pages/page-conf



commit 1ae7ed80c77ee31365392d9a4b1a1a52781142f9
Author: Srinivasa Ragavan <sragavan novell com>
Date:   Mon Mar 23 20:00:54 2009 +0530

    Save architecture for saving/restoring pages/page-conf
---
 src/em-tree-store.c    |   17 +++++++++++---
 src/em-tree-store.h    |    3 ++
 src/mail-folder-view.c |   53 ++++++++++++++++++++++++++++++++++++++++++-----
 src/mail-folder-view.h |    2 +-
 src/mail-shell.c       |    1 +
 src/mail-view.c        |   15 +++++++++++++
 src/mail-view.h        |    1 +
 7 files changed, 81 insertions(+), 11 deletions(-)

diff --git a/src/em-tree-store.c b/src/em-tree-store.c
index 7589c51..861ec1f 100644
--- a/src/em-tree-store.c
+++ b/src/em-tree-store.c
@@ -1147,15 +1147,16 @@ em_tree_store_new(gboolean show_children)
 
 int em_tree_store_get_iter(EMTreeStore *emts, GtkTreeIter *iter, const char *uid)
 {
-       return FALSE;
-#if 0
-        struct _EMTreeStorePrivate *p = _PRIVATE(emts);
+	struct _EMTreeStorePrivate *p = _PRIVATE(emts);
+	struct _emts_folder *f;
+	int i;
+
+	f = (struct _emts_folder *)p->folders.head;
  
        iter->user_data = g_hash_table_lookup(f->uid_table, uid);
        iter->stamp = emts->stamp;
  
         return iter->user_data != NULL;
-#endif
 }
 
 static time_t
@@ -1291,6 +1292,14 @@ em_tree_store_get_child_sorted_tree (EMTreeStore  *emts, GtkTreeIter *iter)
 	 return nodes;
 }
 
+const char *
+em_tree_store_get_uid_from_iter (EMTreeStore  *emts, GtkTreeIter *iter)
+{
+	 EMTreeNode *node = (EMTreeNode *) iter->user_data;
+
+	 return node->info->uid;
+}
+
 CamelMessageInfo *
 em_tree_store_get_info_from_path_string (EMTreeStore  *emts, const char *path)
 {
diff --git a/src/em-tree-store.h b/src/em-tree-store.h
index f4a033b..68fdafc 100644
--- a/src/em-tree-store.h
+++ b/src/em-tree-store.h
@@ -110,4 +110,7 @@ time_t em_tree_store_thread_time (EMTreeStore *emts, const char *uid);
 int em_tree_store_count_children (EMTreeStore *emts, GtkTreeIter *iter);
 GPtrArray * em_tree_store_get_child_sorted_tree (EMTreeStore  *emts, GtkTreeIter *iter);
 CamelMessageInfo * em_tree_store_get_info_from_path_string (EMTreeStore  *emts, const char *path);
+const char * em_tree_store_get_uid_from_iter (EMTreeStore  *emts, GtkTreeIter *iter);
+int em_tree_store_get_iter(EMTreeStore *emts, GtkTreeIter *iter, const char *uid);
+
 #endif /* _EM_TREE_STORE_H */
diff --git a/src/mail-folder-view.c b/src/mail-folder-view.c
index a0e9ff4..3f6d9e4 100644
--- a/src/mail-folder-view.c
+++ b/src/mail-folder-view.c
@@ -63,6 +63,8 @@ enum {
 	LAST_SIGNAL
 };
 
+static const char * mfv_get_selected_uid (GtkTreeView *tree, MailFolderView *mfv);
+	 
 static guint signals[LAST_SIGNAL] = { 0 };
 
 G_DEFINE_TYPE (MailFolderView, mail_folder_view, GTK_TYPE_VBOX)
@@ -152,6 +154,11 @@ mfv_btn_expose (GtkWidget *w, GdkEventExpose *event, MailFolderView *mfv)
 static void
 mfv_close (GtkButton *w, MailFolderView *mfv)
 {
+	const char *uid = mfv_get_selected_uid (mfv->tree, mfv);
+	if (uid && *uid && mfv->priv->folder) {
+		 camel_object_meta_set (mfv->priv->folder, "anjal:selected_uid", uid);
+		 camel_object_state_write(mfv->priv->folder);
+	}
 	g_signal_emit (mfv, signals[VIEW_CLOSE], 0);			
 }
 
@@ -211,9 +218,10 @@ static void
 mail_folder_view_finalize (GObject *object)
 {
 	 MailFolderView *mfv = (MailFolderView  *)object;
-	 
-	 if (mfv->priv->folder)
-		  camel_object_unref (mfv->priv->folder);	 
+
+	 if (mfv->priv->folder) {
+		  camel_object_unref (mfv->priv->folder);
+	 }
 	 g_object_unref (mfv->model);
 
 	 g_free (mfv->priv->uri);
@@ -356,7 +364,8 @@ mail_folder_view_set_folder (MailFolderView *mfv, CamelFolder *folder, const cha
 	}
 	if (folder) {
 		/* Load cursor based or folder based */
-		 
+		char *last_sel_uid;
+		GtkTreeIter iter;
 		gtk_tree_view_set_model (GTK_TREE_VIEW (mfv->tree), mfv->model);
 		mfv->priv->uri = g_strdup(uri);
 		mfv->priv->folder = folder;
@@ -365,9 +374,20 @@ mail_folder_view_set_folder (MailFolderView *mfv, CamelFolder *folder, const cha
 		gtk_widget_hide (mfv->priv->info_bar);
 		gtk_widget_show (mfv->priv->view_scroller);
 		gtk_widget_show (mfv->tree);		
-
+		last_sel_uid = camel_object_meta_get (folder, "anjal:selected_uid");
 		gtk_label_set_text (mfv->priv->tab_str, folder->full_name);
-
+		if (last_sel_uid && *last_sel_uid) {
+			 GtkTreeSelection *sel = gtk_tree_view_get_selection (mfv->tree);
+			 GtkTreePath *path;
+			 if (em_tree_store_get_iter (mfv->model, &iter, last_sel_uid)) {
+				  
+				  gtk_tree_selection_select_iter (sel, &iter);
+				  path = gtk_tree_model_get_path (mfv->model, &iter);
+				  
+				  gtk_tree_view_scroll_to_cell (mfv->tree, path, NULL, FALSE, 0, 0);
+				  gtk_tree_path_free (path);
+			 }
+		}
 		/* FIXME: Set a signal emit and listen for it at note book and set the title appropriately */
 	}
 }
@@ -689,6 +709,20 @@ mail_folder_view_show_list (MailFolderView *mfv)
 	
 }
 
+static const char *
+mfv_get_selected_uid (GtkTreeView *tree, MailFolderView *mfv)
+{
+	 GtkTreeSelection *sel = gtk_tree_view_get_selection (tree);
+	 GtkTreeIter iter;
+	 gboolean selected;
+	 
+	 selected = gtk_tree_selection_get_selected (sel, NULL, &iter);
+	 if(!selected)
+		  return NULL;
+	 
+	 return em_tree_store_get_uid_from_iter (mfv->model, &iter);
+}
+
 static void
 mfv_message_activated (GtkTreeView       *tree_view,  GtkTreePath       *path, GtkTreeViewColumn *column,  MailFolderView *shell)
 {
@@ -1074,3 +1108,10 @@ mail_folder_view_check_mail (MailFolderView *mfv)
 {
 	 
 }
+
+
+void
+mail_folder_view_save (MailFolderView *mfv)
+{
+	 mfv_close(NULL, mfv);
+}
diff --git a/src/mail-folder-view.h b/src/mail-folder-view.h
index 6ab6a97..b00be36 100644
--- a/src/mail-folder-view.h
+++ b/src/mail-folder-view.h
@@ -70,5 +70,5 @@ void mail_folder_view_show_sort_popup  (MailFolderView *, GtkWidget *);
 void mail_folder_view_show_list (MailFolderView *mfv);
 void mail_folder_view_activate (MailFolderView *mfv, GtkWidget *tree, GtkWidget *folder_tree, GtkWidget *check_mail, GtkWidget *sort_by, gboolean act);
 void mail_folder_view_check_mail (MailFolderView *mfv);
-
+void mail_folder_view_save (MailFolderView *mfv);
 #endif
diff --git a/src/mail-shell.c b/src/mail-shell.c
index 0fb7c50..9a2288a 100644
--- a/src/mail-shell.c
+++ b/src/mail-shell.c
@@ -207,6 +207,7 @@ mail_shell_quit (MailShell *shell)
 	/* What other clean ups ?*/
 	gboolean quit = mail_component_can_quit (shell->mail_component);
 	if (quit) {
+		mail_view_save(shell->mail_component->mail_view); 
 		mail_component_quit (shell->mail_component);
 		gtk_main_quit();
 	}
diff --git a/src/mail-view.c b/src/mail-view.c
index 0f3599c..40e8082 100644
--- a/src/mail-view.c
+++ b/src/mail-view.c
@@ -383,3 +383,18 @@ mail_view_check_mail(MailView *mv)
 	 }
 	 
 }
+
+void
+mail_view_save (MailView *mv)
+{
+	 GList *child = mv->priv->children;
+	 MailViewChild *cview;
+
+	 while (child) {
+		  cview = (MailViewChild *)child->data;
+		  if (cview->type = MAIL_VIEW_FOLDER) {
+			   mail_folder_view_save (cview);
+		  }
+		  child = child->next;
+	 }
+}
diff --git a/src/mail-view.h b/src/mail-view.h
index 1835dc4..68dd17f 100644
--- a/src/mail-view.h
+++ b/src/mail-view.h
@@ -70,4 +70,5 @@ void mail_view_set_sort_by  (MailView *mv, GtkWidget *button);
 void mail_view_check_mail(MailView *mv);
 void mail_view_set_folder_tree_widget (MailView *mv, GtkWidget *tree);
 void mail_view_set_folder_tree (MailView *mv, GtkWidget *tree);
+void mail_view_save (MailView *mv);
 #endif



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