aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-11-02 02:46:43 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-11-02 02:46:43 +0000
commit6c03bdd1dd117003e703e44aacc5aed4dc3b17bc (patch)
treefd3f47684c9a36e70cff2ccd4ccc410dcb0c6eb6 /src
parent5136f54d0566e8a4695dcc100043c9bfec2443a5 (diff)
added the option 'Remember last selected message'.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1262 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/prefs_common_dialog.c9
-rw-r--r--src/summaryview.c30
2 files changed, 33 insertions, 6 deletions
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;
@@ -2095,6 +2099,10 @@ static void prefs_details_create(void)
(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)) {