summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2023-01-20 16:37:20 +0100
committerMilan Crha <mcrha@redhat.com>2023-01-20 16:39:40 +0100
commitc18db0eced9c1c806d6258e593b13f9657b6abe2 (patch)
tree68839faa88427df7c76d1d4b0f28007fade648b1
parent55ca0a7a7baef359e690ceee13ea8f019f53ddc3 (diff)
downloadevolution-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.c27
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;