aboutsummaryrefslogtreecommitdiffstats
path: root/mail/message-list.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2010-10-20 17:14:19 +0800
committerMilan Crha <mcrha@redhat.com>2010-10-20 17:15:43 +0800
commit92e6052e56b0e81e9718bdd665ada8356f90dbc1 (patch)
treeff8406aec5476fa88d06bac55b7eaa374cbf65de /mail/message-list.c
parentbc8ab2a93b61faef7ba1285dd602a353e812bc68 (diff)
downloadgsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.tar
gsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.tar.gz
gsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.tar.bz2
gsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.tar.lz
gsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.tar.xz
gsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.tar.zst
gsoc2013-evolution-92e6052e56b0e81e9718bdd665ada8356f90dbc1.zip
Bug #630969 - Implement also Message->Go to->Previous Thread
Diffstat (limited to 'mail/message-list.c')
-rw-r--r--mail/message-list.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/mail/message-list.c b/mail/message-list.c
index 31a3221d23..974eb1c295 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -782,6 +782,43 @@ message_list_select_next_thread (MessageList *ml)
}
}
+void
+message_list_select_prev_thread (MessageList *ml)
+{
+ ETreePath node;
+ ETreeTableAdapter *etta;
+ gint i, row;
+ gboolean skip_first;
+
+ etta = e_tree_get_table_adapter (E_TREE (ml));
+
+ if (!ml->cursor_uid
+ || (node = g_hash_table_lookup (ml->uid_nodemap, ml->cursor_uid)) == NULL)
+ return;
+
+ row = e_tree_table_adapter_row_of_node (etta, node);
+ if (row == -1)
+ return;
+
+ /* skip first found if in the middle of the thread */
+ skip_first = !e_tree_model_node_is_root (ml->model, e_tree_model_node_get_parent (ml->model, node));
+
+ /* find the previous node which has a root parent (i.e. toplevel node) */
+ for (i = row - 1; i >= 0; i--) {
+ node = e_tree_table_adapter_node_at_row (etta, i);
+ if (node
+ && e_tree_model_node_is_root (ml->model, e_tree_model_node_get_parent (ml->model, node))) {
+ if (skip_first) {
+ skip_first = FALSE;
+ continue;
+ }
+
+ select_path (ml, node);
+ return;
+ }
+ }
+}
+
static gboolean
message_list_select_all_timeout_cb (MessageList *message_list)
{