aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-10 07:31:23 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-10 07:31:23 +0000
commit7364f9d56a14c2b9dea6277f867aa59693dc4821 (patch)
treecf52e4cb6a108381d0f5384b441061a794f5b4cc /src
parentdb552efbbe847365a84b7a18e01f9365d405e410 (diff)
fixed selection handling.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@240 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r--src/summaryview.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/src/summaryview.c b/src/summaryview.c
index 864184e6..8def1374 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -649,9 +649,11 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
if (!summaryview->selected) {
/* no selected message - select first unread
message, but do not display it */
- if (!summary_find_next_flagged_msg
- (summaryview, &iter, NULL, MSG_UNREAD, FALSE) &&
- item->total > 0) {
+ if (summary_find_next_flagged_msg
+ (summaryview, &iter, NULL, MSG_UNREAD, FALSE)) {
+ summary_select_row(summaryview, &iter,
+ FALSE, TRUE);
+ } else if (item->total > 0) {
g_signal_emit_by_name
(treeview, "move-cursor",
GTK_MOVEMENT_BUFFER_ENDS,
@@ -673,11 +675,13 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
summary_select_row(summaryview, &iter,
FALSE, TRUE);
} else {
+ summary_unlock(summaryview);
g_signal_emit_by_name
(treeview, "move-cursor",
GTK_MOVEMENT_BUFFER_ENDS,
item->sort_type == SORT_DESCENDING ?
-1 : 1, &moved);
+ summary_lock(summaryview);
}
}
@@ -3802,6 +3806,7 @@ static gboolean summary_button_pressed(GtkWidget *treeview,
GtkTreePath *path;
GtkTreeViewColumn *column = NULL;
gboolean is_selected;
+ gboolean mod_pressed;
if (!event) return FALSE;
@@ -3812,6 +3817,8 @@ static gboolean summary_button_pressed(GtkWidget *treeview,
is_selected = gtk_tree_selection_path_is_selected
(summaryview->selection, path);
+ mod_pressed = ((event->state &
+ (GDK_SHIFT_MASK|GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0);
if ((event->button == 1 || event->button == 2)) {
GtkTreeIter iter;
@@ -3863,12 +3870,14 @@ static gboolean summary_button_pressed(GtkWidget *treeview,
if (event->button == 1) {
if (summary_get_selection_type(summaryview) ==
- SUMMARY_SELECTED_MULTIPLE && is_selected) {
+ SUMMARY_SELECTED_MULTIPLE && is_selected &&
+ !mod_pressed) {
summaryview->can_toggle_selection = FALSE;
summaryview->pressed_path = gtk_tree_path_copy(path);
} else {
summaryview->can_toggle_selection = TRUE;
- if (messageview_is_visible(summaryview->messageview))
+ if (!mod_pressed &&
+ messageview_is_visible(summaryview->messageview))
summaryview->display_msg = TRUE;
}
} else if (event->button == 2) {
@@ -4042,9 +4051,16 @@ static void summary_selection_changed(GtkTreeSelection *selection,
summary_status_show(summaryview);
if (gtk_tree_selection_count_selected_rows(selection) != 1) {
- gtk_tree_row_reference_free(summaryview->selected);
- summaryview->selected = NULL;
+ if (summaryview->selected) {
+ gtk_tree_row_reference_free(summaryview->selected);
+ summaryview->selected = NULL;
+ }
summaryview->display_msg = FALSE;
+ if (summaryview->displayed && prefs_common.always_show_msg) {
+ messageview_clear(summaryview->messageview);
+ gtk_tree_row_reference_free(summaryview->displayed);
+ summaryview->displayed = NULL;
+ }
summary_set_menu_sensitive(summaryview);
main_window_set_toolbar_sensitive(summaryview->mainwin);
return;