From 6c03bdd1dd117003e703e44aacc5aed4dc3b17bc Mon Sep 17 00:00:00 2001 From: hiro Date: Thu, 2 Nov 2006 02:46:43 +0000 Subject: added the option 'Remember last selected message'. git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1262 ee746299-78ed-0310-b773-934348b2243d --- src/prefs_common_dialog.c | 9 +++++++++ src/summaryview.c | 30 ++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/prefs_common_dialog.c b/src/prefs_common_dialog.c index 80e8aa8b..eb3e37ea 100644 --- a/src/prefs_common_dialog.c +++ b/src/prefs_common_dialog.c @@ -183,6 +183,7 @@ static struct Privacy { static struct Interface { GtkWidget *checkbtn_always_show_msg; GtkWidget *checkbtn_openunread; + GtkWidget *checkbtn_remember_lastsel; GtkWidget *checkbtn_mark_as_read_on_newwin; GtkWidget *checkbtn_openinbox; GtkWidget *checkbtn_openinbox_startup; @@ -448,6 +449,8 @@ static PrefsUIData ui_data[] = { prefs_set_data_from_toggle, prefs_set_toggle}, {"open_unread_on_enter", &interface.checkbtn_openunread, prefs_set_data_from_toggle, prefs_set_toggle}, + {"remember_last_selected", &interface.checkbtn_remember_lastsel, + prefs_set_data_from_toggle, prefs_set_toggle}, {"mark_as_read_on_new_window", &interface.checkbtn_mark_as_read_on_newwin, prefs_set_data_from_toggle, prefs_set_toggle}, @@ -2049,6 +2052,7 @@ static void prefs_details_create(void) GtkWidget *vbox3; GtkWidget *checkbtn_always_show_msg; GtkWidget *checkbtn_openunread; + GtkWidget *checkbtn_remember_lastsel; GtkWidget *checkbtn_mark_as_read_on_newwin; GtkWidget *checkbtn_openinbox; GtkWidget *checkbtn_openinbox_startup; @@ -2094,6 +2098,10 @@ static void prefs_details_create(void) SET_TOGGLE_SENSITIVITY_REV (checkbtn_always_show_msg, checkbtn_openunread); + PACK_CHECK_BUTTON + (vbox2, checkbtn_remember_lastsel, + _("Remember last selcted message")); + PACK_CHECK_BUTTON (vbox2, checkbtn_mark_as_read_on_newwin, _("Only mark message as read when opened in new window")); @@ -2164,6 +2172,7 @@ static void prefs_details_create(void) interface.checkbtn_always_show_msg = checkbtn_always_show_msg; interface.checkbtn_openunread = checkbtn_openunread; + interface.checkbtn_remember_lastsel = checkbtn_remember_lastsel; interface.checkbtn_mark_as_read_on_newwin = checkbtn_mark_as_read_on_newwin; interface.checkbtn_openinbox = checkbtn_openinbox; diff --git a/src/summaryview.c b/src/summaryview.c index b333f582..da7c73f3 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -727,6 +727,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, guint selected_msgnum = 0; guint displayed_msgnum = 0; gboolean moved; + gboolean selection_done = FALSE; if (summary_is_locked(summaryview)) return FALSE; @@ -737,11 +738,18 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, is_refresh = (item == summaryview->folder_item && update_cache == FALSE) ? TRUE : FALSE; - if (is_refresh) { - selected_msgnum = summary_get_msgnum(summaryview, - summaryview->selected); - displayed_msgnum = summary_get_msgnum(summaryview, - summaryview->displayed); + selected_msgnum = summary_get_msgnum(summaryview, + summaryview->selected); + displayed_msgnum = summary_get_msgnum(summaryview, + summaryview->displayed); + if (summaryview->folder_item) + summaryview->folder_item->last_selected = selected_msgnum; + if (!is_refresh) { + if (item) + selected_msgnum = item->last_selected; + else + selected_msgnum = 0; + displayed_msgnum = 0; } /* process the marks if any */ @@ -856,7 +864,17 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item, summary_scroll_to_selected(summaryview, TRUE); } } - } else { + selection_done = TRUE; + } else if (prefs_common.remember_last_selected) { + summary_unlock(summaryview); + summary_select_by_msgnum(summaryview, selected_msgnum); + summary_lock(summaryview); + + if (summaryview->selected) + selection_done = TRUE; + } + + if (!selection_done) { /* select first unread message */ if (summary_find_next_flagged_msg(summaryview, &iter, NULL, MSG_UNREAD, FALSE)) { -- cgit v1.2.3