Remove app-misc/recoll as it is maintained again
[marcv-overlay.git] / mail-client / claws-mail / files / claws-mail-3.16.0-sorting.patch
blob59d08dc771c5f975f6c69a329e7d137c13bb2d34
1 >From 98f7a34b17a2cd9a6b23af46064f4f2485601004 Mon Sep 17 00:00:00 2001
2 From: Olivier Brunel <jjk@jjacky.com>
3 Date: Sat, 3 Jun 2017 22:10:37 +0200
4 Subject: [PATCH] prefs: add option "Ignore sort direction / Make sort order
5 aware"
7 When enabled, we get the old/classic claws behavior, where first means
8 last, next means previous & previous means last if sorted descending.
10 When disabled, things make sense. :)
12 It affects default selection when opening folder, go to previous/next
13 {,unread,marked,etc} message and next_on_delete behavior.
14 ---
15 src/prefs_common.c | 3 +
16 src/prefs_common.h | 2 +
17 src/prefs_summaries.c | 15 +++++
18 src/summaryview.c | 155 ++++++++++++++++++++++++++------------------------
19 4 files changed, 101 insertions(+), 74 deletions(-)
21 diff --git a/src/prefs_common.c b/src/prefs_common.c
22 index 5a5ee4fd9..5f53ee813 100644
23 --- a/src/prefs_common.c
24 +++ b/src/prefs_common.c
25 @@ -798,6 +798,9 @@ static PrefParam param[] = {
26 #endif
27 /* {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL,
28 NULL, NULL, NULL}, */
29 + {"ignore_sort_direction", "FALSE",
30 + &prefs_common.ignore_sort_direction,
31 + P_BOOL, NULL, NULL, NULL},
32 {"open_selected_message_on_folder_open", "FALSE",
33 &prefs_common.open_selected_on_folder_open,
34 P_BOOL, NULL, NULL, NULL},
35 diff --git a/src/prefs_common.h b/src/prefs_common.h
36 index b94d34ccc..cfb04bea9 100644
37 --- a/src/prefs_common.h
38 +++ b/src/prefs_common.h
39 @@ -363,6 +363,8 @@ struct _PrefsCommon
40 gint statusbar_update_step;
41 gboolean emulate_emacs;
43 + gboolean ignore_sort_direction;
45 gboolean open_selected_on_folder_open;
46 gboolean open_selected_on_search_results;
47 gboolean open_selected_on_prevnext;
48 diff --git a/src/prefs_summaries.c b/src/prefs_summaries.c
49 index 7e131dc58..5b11864fd 100644
50 --- a/src/prefs_summaries.c
51 +++ b/src/prefs_summaries.c
52 @@ -64,6 +64,7 @@ typedef struct _SummariesPage
53 GtkWidget *entry_datefmt;
55 GtkWidget *checkbtn_reopen_last_folder;
56 + GtkWidget *checkbtn_ignore_sort_direction;
57 GtkWidget *checkbtn_always_show_msg;
58 GtkWidget *checkbtn_show_on_folder_open;
59 GtkWidget *checkbtn_show_on_search_results;
60 @@ -336,6 +337,7 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
61 GtkWidget *hbox_dispitem;
62 GtkWidget *button_dispitem;
63 GtkWidget *checkbtn_reopen_last_folder;
64 + GtkWidget *checkbtn_ignore_sort_direction;
65 GtkWidget *checkbtn_always_show_msg;
66 GtkWidget *checkbtn_show_on_folder_open;
67 GtkWidget *checkbtn_show_on_search_results;
68 @@ -476,6 +478,13 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
69 G_CALLBACK (prefs_summary_open_open),
70 NULL);
72 + PACK_CHECK_BUTTON
73 + (vbox2, checkbtn_ignore_sort_direction,
74 + _("Ignore sort direction / Make sort order aware"));
75 + gtk_widget_set_tooltip_text (checkbtn_ignore_sort_direction,
76 + _("When enabled, certain features (default selection when entering folder, go to previous/next features, etc) "
77 + "will work in reverse when sorted descending: first becomes last, go next becomes go previous, etc"));
79 /* Next Unread Message Dialog */
80 hbox1 = gtk_hbox_new (FALSE, 10);
81 gtk_widget_show (hbox1);
82 @@ -619,6 +628,7 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
83 prefs_summaries->checkbtn_threadsubj = checkbtn_threadsubj;
84 prefs_summaries->entry_datefmt = entry_datefmt;
85 prefs_summaries->checkbtn_reopen_last_folder = checkbtn_reopen_last_folder;
86 + prefs_summaries->checkbtn_ignore_sort_direction = checkbtn_ignore_sort_direction;
88 prefs_summaries->checkbtn_always_show_msg = checkbtn_always_show_msg;
89 prefs_summaries->checkbtn_show_on_folder_open = checkbtn_show_on_folder_open;
90 @@ -661,6 +671,8 @@ static void prefs_summaries_create_widget(PrefsPage *_page, GtkWindow *window,
91 prefs_common.date_format?prefs_common.date_format:"");
92 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_reopen_last_folder),
93 prefs_common.goto_last_folder_on_startup);
94 + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_ignore_sort_direction),
95 + prefs_common.ignore_sort_direction);
97 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_always_show_msg),
98 prefs_common.always_show_msg);
99 @@ -720,6 +732,9 @@ static void prefs_summaries_save(PrefsPage *_page)
100 prefs_common.goto_last_folder_on_startup = gtk_toggle_button_get_active(
101 GTK_TOGGLE_BUTTON(page->checkbtn_reopen_last_folder));
103 + prefs_common.ignore_sort_direction = gtk_toggle_button_get_active(
104 + GTK_TOGGLE_BUTTON(page->checkbtn_ignore_sort_direction));
106 prefs_common.always_show_msg = gtk_toggle_button_get_active(
107 GTK_TOGGLE_BUTTON(page->checkbtn_always_show_msg));
108 prefs_common.open_selected_on_folder_open = gtk_toggle_button_get_active(
109 diff --git a/src/summaryview.c b/src/summaryview.c
110 index be44ce6df..8049f0a46 100644
111 --- a/src/summaryview.c
112 +++ b/src/summaryview.c
113 @@ -1477,7 +1477,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
114 if (node == NULL && GTK_CMCLIST(ctree)->row_list != NULL)
115 node = gtk_cmctree_node_nth
116 (ctree,
117 - item->sort_type == SORT_DESCENDING
118 + prefs_common.ignore_sort_direction
119 + && item->sort_type == SORT_DESCENDING
120 ? 0 : GTK_CMCLIST(ctree)->rows - 1);
121 summary_unlock(summaryview);
123 @@ -1495,7 +1496,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
124 if (GTK_CMCLIST(ctree)->row_list != NULL)
125 node = gtk_cmctree_node_nth
126 (ctree,
127 - item->sort_type == SORT_DESCENDING
128 + prefs_common.ignore_sort_direction
129 + && item->sort_type == SORT_DESCENDING
130 ? 0 : GTK_CMCLIST(ctree)->rows - 1);
131 summary_select_node(summaryview, node, OPEN_SELECTED_ON_SEARCH_RESULTS);
133 @@ -1519,28 +1521,31 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
135 switch(act) {
136 case ACTION_MARKED:
137 - if (summaryview->sort_type == SORT_ASCENDING)
138 - node = summary_find_next_flagged_msg(summaryview, NULL,
139 - MSG_MARKED, FALSE);
140 + if (prefs_common.ignore_sort_direction
141 + && item->sort_type == SORT_DESCENDING)
142 + node = summary_find_prev_flagged_msg
143 + (summaryview, NULL, MSG_MARKED, FALSE);
144 else
145 - node = summary_find_prev_flagged_msg(summaryview, NULL,
146 - MSG_MARKED, FALSE);
147 + node = summary_find_next_flagged_msg
148 + (summaryview, NULL, MSG_MARKED, FALSE);
149 break;
150 case ACTION_NEW:
151 - if (summaryview->sort_type == SORT_ASCENDING)
152 - node = summary_find_next_flagged_msg(summaryview, NULL,
153 - MSG_NEW, FALSE);
154 + if (prefs_common.ignore_sort_direction &&
155 + item->sort_type == SORT_DESCENDING)
156 + node = summary_find_prev_flagged_msg
157 + (summaryview, NULL, MSG_NEW, FALSE);
158 else
159 - node = summary_find_prev_flagged_msg(summaryview, NULL,
160 - MSG_NEW, FALSE);
161 + node = summary_find_next_flagged_msg
162 + (summaryview, NULL, MSG_NEW, FALSE);
163 break;
164 case ACTION_UNREAD:
165 - if (summaryview->sort_type == SORT_ASCENDING)
166 - node = summary_find_next_flagged_msg(summaryview, NULL,
167 - MSG_UNREAD, FALSE);
168 + if (prefs_common.ignore_sort_direction
169 + && item->sort_type == SORT_DESCENDING)
170 + node = summary_find_prev_flagged_msg
171 + (summaryview, NULL, MSG_UNREAD, FALSE);
172 else
173 - node = summary_find_prev_flagged_msg(summaryview, NULL,
174 - MSG_UNREAD, FALSE);
175 + node = summary_find_next_flagged_msg
176 + (summaryview, NULL, MSG_UNREAD, FALSE);
177 break;
178 case ACTION_LAST_OPENED:
179 if (summaryview->folder_item) {
180 @@ -1552,7 +1557,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
181 if (GTK_CMCLIST(ctree)->row_list != NULL) {
182 node = gtk_cmctree_node_nth
183 (ctree,
184 - item->sort_type == SORT_DESCENDING
185 + prefs_common.ignore_sort_direction
186 + && item->sort_type == SORT_DESCENDING
187 ? 0 : GTK_CMCLIST(ctree)->rows - 1);
189 break;
190 @@ -1560,8 +1566,9 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
191 if (GTK_CMCLIST(ctree)->row_list != NULL) {
192 node = gtk_cmctree_node_nth
193 (ctree,
194 - item->sort_type == SORT_ASCENDING
195 - ? 0 : GTK_CMCLIST(ctree)->rows - 1);
196 + prefs_common.ignore_sort_direction
197 + && item->sort_type == SORT_DESCENDING
198 + ? GTK_CMCLIST(ctree)->rows - 1 : 0);
200 break;
201 case ACTION_NOTHING:
202 @@ -1841,10 +1848,10 @@ void summary_select_prev(SummaryView *summaryview)
203 GtkCMCTreeNode *node = summaryview->selected;
204 GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
206 - if (summaryview->sort_type == SORT_ASCENDING)
207 - node = gtkut_ctree_node_prev(ctree, node);
208 - else
209 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
210 node = gtkut_ctree_node_next(ctree, node);
211 + else
212 + node = gtkut_ctree_node_prev(ctree, node);
214 if (node && node != summaryview->selected)
215 summary_select_node(summaryview, node, OPEN_SELECTED_ON_PREVNEXT);
216 @@ -1855,10 +1862,10 @@ void summary_select_next(SummaryView *summaryview)
217 GtkCMCTreeNode *node = summaryview->selected;
218 GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
220 - if (summaryview->sort_type == SORT_ASCENDING)
221 - node = gtkut_ctree_node_next(ctree, node);
222 - else
223 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
224 node = gtkut_ctree_node_prev(ctree, node);
225 + else
226 + node = gtkut_ctree_node_next(ctree, node);
228 if (node && node != summaryview->selected)
229 summary_select_node(summaryview, node, OPEN_SELECTED_ON_PREVNEXT);
230 @@ -1868,11 +1875,11 @@ void summary_select_prev_unread(SummaryView *summaryview)
232 GtkCMCTreeNode *node;
234 - if (summaryview->sort_type == SORT_ASCENDING)
235 - node = summary_find_prev_flagged_msg
236 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
237 + node = summary_find_next_flagged_msg
238 (summaryview, summaryview->selected, MSG_UNREAD, TRUE);
239 else
240 - node = summary_find_next_flagged_msg
241 + node = summary_find_prev_flagged_msg
242 (summaryview, summaryview->selected, MSG_UNREAD, TRUE);
244 if (!node || node == summaryview->selected) {
245 @@ -1896,11 +1903,11 @@ void summary_select_prev_unread(SummaryView *summaryview)
246 _("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
248 if (val != G_ALERTALTERNATE) return;
249 - if (summaryview->sort_type == SORT_ASCENDING)
250 - node = summary_find_prev_flagged_msg(summaryview, NULL,
251 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
252 + node = summary_find_next_flagged_msg(summaryview, NULL,
253 MSG_UNREAD, FALSE);
254 else
255 - node = summary_find_next_flagged_msg(summaryview, NULL,
256 + node = summary_find_prev_flagged_msg(summaryview, NULL,
257 MSG_UNREAD, FALSE);
260 @@ -1914,11 +1921,11 @@ void summary_select_next_unread(SummaryView *summaryview)
262 GtkCMCTreeNode *node = summaryview->selected;
264 - if (summaryview->sort_type == SORT_ASCENDING)
265 - node = summary_find_next_flagged_msg
266 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
267 + node = summary_find_prev_flagged_msg
268 (summaryview, node, MSG_UNREAD, TRUE);
269 else
270 - node = summary_find_prev_flagged_msg
271 + node = summary_find_next_flagged_msg
272 (summaryview, node, MSG_UNREAD, TRUE);
274 if (node)
275 @@ -1953,11 +1960,11 @@ void summary_select_prev_new(SummaryView *summaryview)
277 GtkCMCTreeNode *node;
279 - if (summaryview->sort_type == SORT_ASCENDING)
280 - node = summary_find_prev_flagged_msg
281 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
282 + node = summary_find_next_flagged_msg
283 (summaryview, summaryview->selected, MSG_NEW, TRUE);
284 else
285 - node = summary_find_next_flagged_msg
286 + node = summary_find_prev_flagged_msg
287 (summaryview, summaryview->selected, MSG_NEW, TRUE);
289 if (!node || node == summaryview->selected) {
290 @@ -1981,11 +1988,11 @@ void summary_select_prev_new(SummaryView *summaryview)
291 _("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
293 if (val != G_ALERTALTERNATE) return;
294 - if (summaryview->sort_type == SORT_ASCENDING)
295 - node = summary_find_prev_flagged_msg(summaryview, NULL,
296 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
297 + node = summary_find_next_flagged_msg(summaryview, NULL,
298 MSG_NEW, FALSE);
299 else
300 - node = summary_find_next_flagged_msg(summaryview, NULL,
301 + node = summary_find_prev_flagged_msg(summaryview, NULL,
302 MSG_NEW, FALSE);
305 @@ -1999,11 +2006,11 @@ void summary_select_next_new(SummaryView *summaryview)
307 GtkCMCTreeNode *node = summaryview->selected;
309 - if (summaryview->sort_type == SORT_ASCENDING)
310 - node = summary_find_next_flagged_msg
311 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
312 + node = summary_find_prev_flagged_msg
313 (summaryview, node, MSG_NEW, TRUE);
314 else
315 - node = summary_find_prev_flagged_msg
316 + node = summary_find_next_flagged_msg
317 (summaryview, node, MSG_NEW, TRUE);
319 if (node)
320 @@ -2037,11 +2044,11 @@ void summary_select_prev_marked(SummaryView *summaryview)
322 GtkCMCTreeNode *node;
324 - if (summaryview->sort_type == SORT_ASCENDING)
325 - node = summary_find_prev_flagged_msg
326 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
327 + node = summary_find_next_flagged_msg
328 (summaryview, summaryview->selected, MSG_MARKED, TRUE);
329 else
330 - node = summary_find_next_flagged_msg
331 + node = summary_find_prev_flagged_msg
332 (summaryview, summaryview->selected, MSG_MARKED, TRUE);
334 if (!node) {
335 @@ -2066,11 +2073,11 @@ void summary_select_next_marked(SummaryView *summaryview)
337 GtkCMCTreeNode *node = summaryview->selected;
339 - if (summaryview->sort_type == SORT_ASCENDING)
340 - node = summary_find_next_flagged_msg
341 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
342 + node = summary_find_prev_flagged_msg
343 (summaryview, node, MSG_MARKED, TRUE);
344 else
345 - node = summary_find_prev_flagged_msg
346 + node = summary_find_next_flagged_msg
347 (summaryview, node, MSG_MARKED, TRUE);
349 if (node)
350 @@ -2104,11 +2111,11 @@ void summary_select_prev_labeled(SummaryView *summaryview)
352 GtkCMCTreeNode *node;
354 - if (summaryview->sort_type == SORT_ASCENDING)
355 - node = summary_find_prev_flagged_msg
356 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
357 + node = summary_find_next_flagged_msg
358 (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
359 else
360 - node = summary_find_next_flagged_msg
361 + node = summary_find_prev_flagged_msg
362 (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
364 if (!node) {
365 @@ -2133,11 +2140,11 @@ void summary_select_next_labeled(SummaryView *summaryview)
367 GtkCMCTreeNode *node;
369 - if (summaryview->sort_type == SORT_ASCENDING)
370 - node = summary_find_next_flagged_msg
371 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
372 + node = summary_find_prev_flagged_msg
373 (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
374 else
375 - node = summary_find_prev_flagged_msg
376 + node = summary_find_next_flagged_msg
377 (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
379 if (!node) {
380 @@ -2148,11 +2155,11 @@ void summary_select_next_labeled(SummaryView *summaryview)
381 "Search from the beginning?"),
382 GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
383 if (val != G_ALERTALTERNATE) return;
384 - if (summaryview->sort_type == SORT_ASCENDING)
385 - node = summary_find_next_flagged_msg(summaryview, NULL,
386 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING)
387 + node = summary_find_prev_flagged_msg(summaryview, NULL,
388 MSG_CLABEL_FLAG_MASK, TRUE);
389 else
390 - node = summary_find_prev_flagged_msg(summaryview, NULL,
391 + node = summary_find_next_flagged_msg(summaryview, NULL,
392 MSG_CLABEL_FLAG_MASK, TRUE);
395 @@ -4477,14 +4484,14 @@ void summary_delete(SummaryView *summaryview)
396 folder_item_set_batch(summaryview->folder_item, FALSE);
397 END_LONG_OPERATION(summaryview);
399 - if (summaryview->sort_type == SORT_ASCENDING) {
400 - node = summary_find_next_msg(summaryview, sel_last, TRUE);
401 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING) {
402 + node = summary_find_prev_msg(summaryview, sel_last, TRUE);
403 if (!node || prefs_common.next_on_delete == FALSE)
404 - node = summary_find_prev_msg(summaryview, sel_last,TRUE);
405 + node = summary_find_next_msg(summaryview, sel_last,TRUE);
406 } else {
407 - node = summary_find_prev_msg(summaryview, sel_last,TRUE);
408 + node = summary_find_next_msg(summaryview, sel_last,TRUE);
409 if (!node || prefs_common.next_on_delete == FALSE)
410 - node = summary_find_next_msg(summaryview, sel_last,TRUE);
411 + node = summary_find_prev_msg(summaryview, sel_last,TRUE);
413 summary_select_node(summaryview, node, OPEN_SELECTED_ON_DELETEMOVE);
415 @@ -4634,14 +4641,14 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder)
416 summary_execute(summaryview);
417 } else {
418 GtkCMCTreeNode *node = NULL;
419 - if (summaryview->sort_type == SORT_ASCENDING) {
420 - node = summary_find_next_msg(summaryview, sel_last,TRUE);
421 - if (!node || prefs_common.next_on_delete == FALSE)
422 - node = summary_find_prev_msg(summaryview, sel_last,TRUE);
423 - } else {
424 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING) {
425 node = summary_find_prev_msg(summaryview, sel_last,TRUE);
426 if (!node || prefs_common.next_on_delete == FALSE)
427 node = summary_find_next_msg(summaryview, sel_last,TRUE);
428 + } else {
429 + node = summary_find_next_msg(summaryview, sel_last,TRUE);
430 + if (!node || prefs_common.next_on_delete == FALSE)
431 + node = summary_find_prev_msg(summaryview, sel_last,TRUE);
433 summary_select_node(summaryview, node, OPEN_SELECTED_ON_DELETEMOVE);
434 summary_status_show(summaryview);
435 @@ -5014,14 +5021,14 @@ gboolean summary_execute(SummaryView *summaryview)
436 if (!new_selected &&
437 gtkut_ctree_node_is_selected(ctree, node)) {
438 summary_unselect_all(summaryview);
439 - if (summaryview->sort_type == SORT_ASCENDING) {
440 - new_selected = summary_find_next_msg(summaryview, node,TRUE);
441 - if (!new_selected || prefs_common.next_on_delete == FALSE)
442 - new_selected = summary_find_prev_msg(summaryview, node,TRUE);
443 - } else {
444 + if (prefs_common.ignore_sort_direction && summaryview->sort_type == SORT_DESCENDING) {
445 new_selected = summary_find_prev_msg(summaryview, node,TRUE);
446 if (!new_selected || prefs_common.next_on_delete == FALSE)
447 new_selected = summary_find_next_msg(summaryview, node,TRUE);
448 + } else {
449 + new_selected = summary_find_next_msg(summaryview, node,TRUE);
450 + if (!new_selected || prefs_common.next_on_delete == FALSE)
451 + new_selected = summary_find_prev_msg(summaryview, node,TRUE);
456 2.15.1