aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-01-27 07:28:23 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2006-01-27 07:28:23 +0000
commit87e24b01c2163658cd35762d3cb596a35e4271da (patch)
tree63b2b88e687e3c59702a00968e74bbf2a1b93372
parent3421560291575cc9a94a7464712be4e69d1631ec (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--ChangeLog6
-rw-r--r--ChangeLog.ja6
-rw-r--r--src/gtkutils.c27
-rw-r--r--src/gtkutils.h7
-rw-r--r--src/summaryview.c25
5 files changed, 66 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 318da055..765f57eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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) {