diff options
author | Milan Crha <mcrha@redhat.com> | 2023-01-20 16:37:20 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2023-01-20 16:39:40 +0100 |
commit | c18db0eced9c1c806d6258e593b13f9657b6abe2 (patch) | |
tree | 68839faa88427df7c76d1d4b0f28007fade648b1 | |
parent | 55ca0a7a7baef359e690ceee13ea8f019f53ddc3 (diff) | |
download | evolution-c18db0eced9c1c806d6258e593b13f9657b6abe2.tar.gz |
I#2191 - Moving message does not select previous message
Closes https://gitlab.gnome.org/GNOME/evolution/-/issues/2191
-rw-r--r-- | src/mail/message-list.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/mail/message-list.c b/src/mail/message-list.c index df15616bcf..58f36c50e3 100644 --- a/src/mail/message-list.c +++ b/src/mail/message-list.c @@ -4706,10 +4706,12 @@ find_next_selectable (MessageList *message_list, { ETreeTableAdapter *adapter; GNode *node; + CamelMessageInfo *info; + GSettings *settings; gint vrow_orig; gint vrow; + gint vrow_inc; gint row_count; - CamelMessageInfo *info; node = g_hash_table_lookup ( message_list->uid_nodemap, @@ -4724,30 +4726,39 @@ find_next_selectable (MessageList *message_list, adapter = e_tree_get_table_adapter (E_TREE (message_list)); row_count = e_table_model_row_count (E_TABLE_MODEL (adapter)); + settings = e_util_ref_settings ("org.gnome.evolution.mail"); + if (g_settings_get_boolean (settings, "delete-selects-previous")) + vrow_inc = -1; + else + vrow_inc = 1; + g_clear_object (&settings); + /* model_to_view_row etc simply don't work for sorted views. Sigh. */ vrow_orig = e_tree_table_adapter_row_of_node (adapter, node); /* We already checked this node. */ - vrow = vrow_orig + 1; + vrow = vrow_orig + vrow_inc; - while (vrow < row_count) { + while (vrow >= 0 && vrow < row_count) { node = e_tree_table_adapter_node_at_row (adapter, vrow); info = get_message_info (message_list, node); if (info && is_node_selectable (message_list, info, removed_uids)) return g_strdup (camel_message_info_get_uid (info)); - vrow++; + vrow += vrow_inc; } + vrow_inc = vrow_inc * (-1); + /* We didn't find any undeleted entries _below_ the currently selected one - * * so let's try to find one _above_ */ - vrow = vrow_orig - 1; + * so let's try to find one _above_ */ + vrow = vrow_orig + vrow_inc; - while (vrow >= 0) { + while (vrow >= 0 && vrow < row_count) { node = e_tree_table_adapter_node_at_row (adapter, vrow); info = get_message_info (message_list, node); if (info && is_node_selectable (message_list, info, removed_uids)) return g_strdup (camel_message_info_get_uid (info)); - vrow--; + vrow += vrow_inc; } return NULL; |