diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-01-27 07:28:23 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2006-01-27 07:28:23 +0000 |
commit | 87e24b01c2163658cd35762d3cb596a35e4271da (patch) | |
tree | 63b2b88e687e3c59702a00968e74bbf2a1b93372 | |
parent | 3421560291575cc9a94a7464712be4e69d1631ec (diff) |
when deleting a collapsed thread, all the messages in the thread will be removed.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@935 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ChangeLog.ja | 6 | ||||
-rw-r--r-- | src/gtkutils.c | 27 | ||||
-rw-r--r-- | src/gtkutils.h | 7 | ||||
-rw-r--r-- | src/summaryview.c | 25 |
5 files changed, 66 insertions, 5 deletions
@@ -1,5 +1,11 @@ 2006-01-27 + * src/gtkutils.[ch] + src/summaryview.c: when deleting a collapsed thread, all the + messages in the thread will be removed. + +2006-01-27 + * src/query_search.[ch] src/Makefile.am src/folderview.c diff --git a/ChangeLog.ja b/ChangeLog.ja index 5db6582d..e69eb8f7 100644 --- a/ChangeLog.ja +++ b/ChangeLog.ja @@ -1,5 +1,11 @@ 2006-01-27 + * src/gtkutils.[ch] + src/summaryview.c: 閉じたスレッドを削除するとそのスレッドのすべての + メッセージを削除するようにした。 + +2006-01-27 + * src/query_search.[ch] src/Makefile.am src/folderview.c diff --git a/src/gtkutils.c b/src/gtkutils.c index 54091314..cdeb4c26 100644 --- a/src/gtkutils.c +++ b/src/gtkutils.c @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * Copyright (C) 1999-2006 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -415,6 +415,31 @@ gboolean gtkut_tree_model_find_by_column_data(GtkTreeModel *model, return FALSE; } +void gtkut_tree_model_foreach(GtkTreeModel *model, GtkTreeIter *start, + GtkTreeModelForeachFunc func, gpointer user_data) +{ + gboolean valid = TRUE; + GtkTreeIter iter; + GtkTreePath *path; + + g_return_if_fail(func != NULL); + + if (!start) { + gtk_tree_model_foreach(model, func, user_data); + return; + } + + path = gtk_tree_model_get_path(model, start); + func(model, path, start, user_data); + gtk_tree_path_free(path); + + valid = gtk_tree_model_iter_children(model, &iter, start); + while (valid) { + gtkut_tree_model_foreach(model, &iter, func, user_data); + valid = gtk_tree_model_iter_next(model, &iter); + } +} + gboolean gtkut_tree_row_reference_get_iter(GtkTreeModel *model, GtkTreeRowReference *ref, GtkTreeIter *iter) diff --git a/src/gtkutils.h b/src/gtkutils.h index efd6802f..9a2eed0b 100644 --- a/src/gtkutils.h +++ b/src/gtkutils.h @@ -1,6 +1,6 @@ /* * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client - * Copyright (C) 1999-2005 Hiroyuki Yamamoto + * Copyright (C) 1999-2006 Hiroyuki Yamamoto * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -135,6 +135,11 @@ gboolean gtkut_tree_model_find_by_column_data gint col, gpointer data); +void gtkut_tree_model_foreach (GtkTreeModel *model, + GtkTreeIter *start, + GtkTreeModelForeachFunc func, + gpointer user_data); + gboolean gtkut_tree_row_reference_get_iter (GtkTreeModel *model, GtkTreeRowReference *ref, diff --git a/src/summaryview.c b/src/summaryview.c index f7c54215..df95a6f2 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -2851,11 +2851,21 @@ static void summary_delete_row(SummaryView *summaryview, GtkTreeIter *iter) msginfo->folder->path, msginfo->msgnum); } +static gboolean summary_delete_foreach_func(GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, gpointer data) +{ + summary_delete_row((SummaryView *)data, iter); + return FALSE; +} + void summary_delete(SummaryView *summaryview) { FolderItem *item = summaryview->folder_item; GList *rows, *cur; GtkTreeIter last_sel, next; + GtkTreeView *treeview = GTK_TREE_VIEW(summaryview->treeview); + GtkTreeModel *model = GTK_TREE_MODEL(summaryview->store); if (!item || FOLDER_TYPE(item->folder) == F_NEWS) return; @@ -2872,13 +2882,22 @@ void summary_delete(SummaryView *summaryview) } rows = summary_get_selected_rows(summaryview); + if (!rows) + return; /* next code sets current row focus right. We need to find a row * that is not deleted. */ for (cur = rows; cur != NULL; cur = cur->next) { - gtk_tree_model_get_iter(GTK_TREE_MODEL(summaryview->store), - &last_sel, (GtkTreePath *)cur->data); - summary_delete_row(summaryview, &last_sel); + GtkTreePath *path = (GtkTreePath *)cur->data; + + gtk_tree_model_get_iter(model, &last_sel, path); + if (gtk_tree_model_iter_has_child(model, &last_sel) && + !gtk_tree_view_row_expanded(treeview, path)) { + gtkut_tree_model_foreach + (model, &last_sel, summary_delete_foreach_func, + summaryview); + } else + summary_delete_row(summaryview, &last_sel); } if (prefs_common.immediate_exec || item->stype == F_TRASH) { |