diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-01-30 07:15:17 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-01-30 07:15:17 +0000 |
commit | 2b189157e5b62851a467dba130a2167a8962bab7 (patch) | |
tree | c338bf5370cee7d52192765732ed467f45d68696 /src | |
parent | a86fc629f6c05556bfc17c62fc3d4f9b487bb6c5 (diff) |
enabled the move/copy of the whole message in collapsed threads.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@943 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r-- | src/summaryview.c | 43 | ||||
-rw-r--r-- | src/summaryview.h | 1 |
2 files changed, 42 insertions, 2 deletions
diff --git a/src/summaryview.c b/src/summaryview.c index b46f3a00..1e70bed9 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -870,6 +870,7 @@ void summary_clear_list(SummaryView *summaryview) summary_msgid_table_destroy(summaryview); summaryview->tmp_mlist = NULL; + summaryview->to_folder = NULL; if (summaryview->folder_table) { g_hash_table_destroy(summaryview->folder_table); summaryview->folder_table = NULL; @@ -3050,9 +3051,20 @@ static void summary_move_row_to(SummaryView *summaryview, GtkTreeIter *iter, msginfo->msgnum, to_folder->path); } +static gboolean summary_move_foreach_func(GtkTreeModel *model, + GtkTreePath *path, GtkTreeIter *iter, + gpointer data) +{ + SummaryView *summaryview = (SummaryView *)data; + + summary_move_row_to(summaryview, iter, summaryview->to_folder); + return FALSE; +} + void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder) { GList *rows, *cur; + GtkTreeView *treeview = GTK_TREE_VIEW(summaryview->treeview); GtkTreeModel *model = GTK_TREE_MODEL(summaryview->store); GtkTreeIter iter; @@ -3072,7 +3084,15 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder) GtkTreePath *path = (GtkTreePath *)cur->data; gtk_tree_model_get_iter(model, &iter, path); - summary_move_row_to(summaryview, &iter, to_folder); + if (gtk_tree_model_iter_has_child(model, &iter) && + !gtk_tree_view_row_expanded(treeview, path)) { + summaryview->to_folder = to_folder; + gtkut_tree_model_foreach + (model, &iter, summary_move_foreach_func, + summaryview); + summaryview->to_folder = NULL; + } else + summary_move_row_to(summaryview, &iter, to_folder); } if (prefs_common.immediate_exec) @@ -3123,9 +3143,20 @@ static void summary_copy_row_to(SummaryView *summaryview, GtkTreeIter *iter, msginfo->msgnum, to_folder->path); } +static gboolean summary_copy_foreach_func(GtkTreeModel *model, + GtkTreePath *path, GtkTreeIter *iter, + gpointer data) +{ + SummaryView *summaryview = (SummaryView *)data; + + summary_copy_row_to(summaryview, iter, summaryview->to_folder); + return FALSE; +} + void summary_copy_selected_to(SummaryView *summaryview, FolderItem *to_folder) { GList *rows, *cur; + GtkTreeView *treeview = GTK_TREE_VIEW(summaryview->treeview); GtkTreeModel *model = GTK_TREE_MODEL(summaryview->store); GtkTreeIter iter; @@ -3145,7 +3176,15 @@ void summary_copy_selected_to(SummaryView *summaryview, FolderItem *to_folder) GtkTreePath *path = (GtkTreePath *)cur->data; gtk_tree_model_get_iter(model, &iter, path); - summary_copy_row_to(summaryview, &iter, to_folder); + if (gtk_tree_model_iter_has_child(model, &iter) && + !gtk_tree_view_row_expanded(treeview, path)) { + summaryview->to_folder = to_folder; + gtkut_tree_model_foreach + (model, &iter, summary_copy_foreach_func, + summaryview); + summaryview->to_folder = NULL; + } else + summary_copy_row_to(summaryview, &iter, to_folder); } if (prefs_common.immediate_exec) diff --git a/src/summaryview.h b/src/summaryview.h index be58150d..58c35071 100644 --- a/src/summaryview.h +++ b/src/summaryview.h @@ -141,6 +141,7 @@ private: /* list for moving/deleting messages */ GSList *tmp_mlist; + FolderItem *to_folder; /* table for updating folder tree */ GHashTable *folder_table; /* counter for filtering */ |