[anjal] Save architecture for saving/restoring pages/page-conf
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: svn-commits-list gnome org
- Subject: [anjal] Save architecture for saving/restoring pages/page-conf
- Date: Mon, 23 Mar 2009 10:35:55 -0400 (EDT)
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]