aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-11 09:13:29 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2005-05-11 09:13:29 +0000
commit33358d1e043a4006791e652374a2b269c4f83c76 (patch)
treed9bbab3f0434f049b450b2ee51e0644140855881
parent02ecfb2ce6166c0ce44753363d558063bcba8176 (diff)
implemented summary_thread_build().
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@244 ee746299-78ed-0310-b773-934348b2243d
-rw-r--r--ChangeLog5
-rw-r--r--ChangeLog.ja5
-rw-r--r--src/mainwindow.c7
-rw-r--r--src/summaryview.c118
4 files changed, 72 insertions, 63 deletions
diff --git a/ChangeLog b/ChangeLog
index 34e4605b..928be1c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2005-05-11
+ * src/summaryview.c
+ src/mainwindow.c: summary_thread_build(): implemented.
+
+2005-05-11
+
* src/utils.c: remove_dir_recursive(): fixed operation failure if
current directory is inside one which is to be removed.
* src/summaryview.c: summary_unthread(): implemented.
diff --git a/ChangeLog.ja b/ChangeLog.ja
index e6442c54..febd00b3 100644
--- a/ChangeLog.ja
+++ b/ChangeLog.ja
@@ -1,5 +1,10 @@
2005-05-11
+ * src/summaryview.c
+ src/mainwindow.c: summary_thread_build(): 実装。
+
+2005-05-11
+
* src/utils.c: remove_dir_recursive(): カレントディレクトリが削除
されるディレクトリ内にある場合に処理に失敗するのを修正。
* src/summaryview.c: summary_unthread(): 実装。
diff --git a/src/mainwindow.c b/src/mainwindow.c
index be7e4ac5..a2b0fa1e 100644
--- a/src/mainwindow.c
+++ b/src/mainwindow.c
@@ -2932,13 +2932,10 @@ static void thread_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
if (mainwin->menu_lock_count) return;
if (!mainwin->summaryview->folder_item) return;
- if (GTK_CHECK_MENU_ITEM(widget)->active) {
- mainwin->summaryview->folder_item->threaded = TRUE;
+ if (GTK_CHECK_MENU_ITEM(widget)->active)
summary_thread_build(mainwin->summaryview);
- } else {
- mainwin->summaryview->folder_item->threaded = FALSE;
+ else
summary_unthread(mainwin->summaryview);
- }
}
static void expand_threads_cb(MainWindow *mainwin, guint action,
diff --git a/src/summaryview.c b/src/summaryview.c
index a2bd00b5..55b16c6d 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -116,6 +116,8 @@ static void summary_msgid_table_destroy (SummaryView *summaryview);
static void summary_set_menu_sensitive (SummaryView *summaryview);
+static void summary_scroll_to_selected (SummaryView *summaryview);
+
static guint summary_get_msgnum (SummaryView *summaryview,
GtkTreeRowReference *row);
@@ -1201,6 +1203,22 @@ void summary_select_row(SummaryView *summaryview, GtkTreeIter *iter,
gtk_tree_path_free(path);
}
+static void summary_scroll_to_selected(SummaryView *summaryview)
+{
+ GtkTreePath *path;
+
+ if (!summaryview->selected)
+ return;
+
+ path = gtk_tree_row_reference_get_path(summaryview->selected);
+ if (path) {
+ gtk_tree_view_scroll_to_cell
+ (GTK_TREE_VIEW(summaryview->treeview),
+ path, NULL, FALSE, 0.0, 0.0);
+ gtk_tree_path_free(path);
+ }
+}
+
static guint summary_get_msgnum(SummaryView *summaryview,
GtkTreeRowReference *row)
{
@@ -1430,17 +1448,7 @@ void summary_attract_by_subject(SummaryView *summaryview)
g_hash_table_destroy(subject_table);
- if (summaryview->selected) {
- GtkTreePath *path;
-
- path = gtk_tree_row_reference_get_path(summaryview->selected);
- if (path) {
- gtk_tree_view_scroll_to_cell
- (GTK_TREE_VIEW(summaryview->treeview),
- path, NULL, FALSE, 0.0, 0.0);
- gtk_tree_path_free(path);
- }
- }
+ summary_scroll_to_selected(summaryview);
debug_print("done.\n");
STATUSBAR_POP(summaryview->mainwin);
@@ -3058,13 +3066,14 @@ static gint summary_execute_delete(SummaryView *summaryview)
void summary_thread_build(SummaryView *summaryview)
{
-#if 0
- GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
- GtkCTreeNode *node;
- GtkCTreeNode *next;
- GtkCTreeNode *parent;
+ GtkTreeModel *model = GTK_TREE_MODEL(summaryview->store);
+ GtkTreeStore *store = summaryview->store;
+ GtkTreeIter iter, next;
+ GSList *mlist;
+ GNode *root, *node;
+ GHashTable *node_table;
MsgInfo *msginfo;
- GSList *reflist;
+ gboolean valid;
summary_lock(summaryview);
@@ -3072,60 +3081,48 @@ void summary_thread_build(SummaryView *summaryview)
STATUSBAR_PUSH(summaryview->mainwin, _("Building threads..."));
main_window_cursor_wait(summaryview->mainwin);
- g_signal_handlers_block_by_func(G_OBJECT(ctree),
- G_CALLBACK(summary_tree_expanded),
- summaryview);
- gtk_clist_freeze(GTK_CLIST(ctree));
+ if (summaryview->folder_item)
+ summaryview->folder_item->threaded = TRUE;
- node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
- while (node) {
- next = GTK_CTREE_ROW(node)->sibling;
-
- msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node);
- if (msginfo && msginfo->inreplyto) {
- parent = g_hash_table_lookup(summaryview->msgid_table,
- msginfo->inreplyto);
- if (!parent && msginfo->references) {
- for (reflist = msginfo->references;
- reflist != NULL; reflist = reflist->next)
- if ((parent = g_hash_table_lookup
- (summaryview->msgid_table,
- reflist->data)))
- break;
- }
+ mlist = summary_get_msg_list(summaryview);
+ root = procmsg_get_thread_tree(mlist);
+ g_slist_free(mlist);
+ node_table = g_hash_table_new(NULL, NULL);
+ for (node = root->children; node != NULL; node = node->next) {
+ g_hash_table_insert(node_table, node->data, node);
+ }
- if (parent && parent != node) {
- gtk_ctree_move(ctree, node, parent, NULL);
- gtk_ctree_expand(ctree, node);
- }
- }
+ valid = gtk_tree_model_get_iter_first(model, &next);
+ while (valid) {
+ iter = next;
+ valid = gtk_tree_model_iter_next(model, &next);
- node = next;
+ gtk_tree_model_get(model, &iter, S_COL_MSG_INFO, &msginfo, -1);
+ node = g_hash_table_lookup(node_table, msginfo);
+ if (node) {
+ GtkTreeIter child;
+
+ for (node = node->children; node != NULL;
+ node = node->next) {
+ summary_insert_gnode(summaryview, store, &child,
+ &iter, NULL, node);
+ }
+ } else
+ gtk_tree_store_remove(store, &iter);
}
- node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+ g_node_destroy(root);
- while (node) {
- next = GTK_CTREE_NODE_NEXT(node);
- if (prefs_common.expand_thread)
- gtk_ctree_expand(ctree, node);
- if (prefs_common.bold_unread &&
- GTK_CTREE_ROW(node)->children)
- summary_set_row_marks(summaryview, node);
- node = next;
- }
+ if (prefs_common.expand_thread)
+ gtk_tree_view_expand_all(GTK_TREE_VIEW(summaryview->treeview));
- gtk_clist_thaw(GTK_CLIST(ctree));
- g_signal_handlers_unblock_by_func(G_OBJECT(ctree),
- G_CALLBACK(summary_tree_expanded),
- summaryview);
+ summary_scroll_to_selected(summaryview);
debug_print(_("done.\n"));
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);
summary_unlock(summaryview);
-#endif
}
static void summary_unthread_node_recursive(SummaryView *summaryview,
@@ -3181,6 +3178,9 @@ void summary_unthread(SummaryView *summaryview)
STATUSBAR_PUSH(summaryview->mainwin, _("Unthreading..."));
main_window_cursor_wait(summaryview->mainwin);
+ if (summaryview->folder_item)
+ summaryview->folder_item->threaded = FALSE;
+
valid = gtk_tree_model_get_iter_first(model, &next);
while (valid) {
@@ -3189,6 +3189,8 @@ void summary_unthread(SummaryView *summaryview)
summary_unthread_node(summaryview, &iter);
}
+ summary_scroll_to_selected(summaryview);
+
debug_print(_("done.\n"));
STATUSBAR_POP(summaryview->mainwin);
main_window_cursor_normal(summaryview->mainwin);