diff options
author | Milan Crha <mcrha@redhat.com> | 2010-10-20 17:14:19 +0800 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2010-10-20 17:15:43 +0800 |
commit | 92e6052e56b0e81e9718bdd665ada8356f90dbc1 (patch) | |
tree | ff8406aec5476fa88d06bac55b7eaa374cbf65de /mail/message-list.c | |
parent | bc8ab2a93b61faef7ba1285dd602a353e812bc68 (diff) | |
download | gsoc2013-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.c | 37 |
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) { |