* please see the file GPL in the top level source directory.
*/
-#if HAVE_CONFIG_H
-# include "config.h"
-#endif
+#include <lib-lib/lib-lib.h>
+
+#include <lib-ui/lib-ui.h>
+#include <lib-ui/menu.h>
+#include <lib-ui/sidebar.h>
+#include <lib-mx/mx.h>
#include "mutt.h"
-#include "mutt_curses.h"
-#include "mutt_menu.h"
#include "sort.h"
-#include "mx.h"
-#include "sidebar.h"
-#ifdef USE_IMAP
-#include "imap_private.h"
-#endif
+#include <imap/imap_private.h>
-#include "lib/intl.h"
void _mutt_set_flag (CONTEXT * ctx, HEADER * h, int flag, int bf, int upd_ctx)
{
h->deleted = 1;
if (upd_ctx)
ctx->deleted++;
-#ifdef USE_IMAP
/* deleted messages aren't treated as changed elsewhere so that the
* purge-on-sync option works correctly. This isn't applicable here */
if (ctx && ctx->magic == M_IMAP) {
if (upd_ctx)
ctx->changed = 1;
}
-#endif
}
}
else if (h->deleted) {
ctx->appended--;
}
h->appended = 0; /* when undeleting, also reset the appended flag */
-#ifdef USE_IMAP
/* see my comment above */
if (ctx->magic == M_IMAP) {
h->changed = 1;
if (upd_ctx)
ctx->changed = 1;
}
-#endif
/*
* If the user undeletes a message which is marked as
* "trash" in the maildir folder on disk, the folder has
if (h->searched && (changed != h->changed || deleted != ctx->deleted ||
tagged != ctx->tagged || flagged != ctx->flagged))
h->searched = 0;
- sidebar_draw (0);
+ sidebar_draw ();
}
void mutt_tag_set_flag (int flag, int bf)
if ((cur = cur->child) == NULL)
return (0);
- FOREVER {
+ for (;;) {
if (cur->message)
mutt_set_flag (Context, cur->message, flag, bf);
/* not reached */
}
-int mutt_change_flag (HEADER * h, int bf)
+int mutt_change_flag(HEADER * h, int bf)
{
- int i, flag;
- event_t event;
-
- mvprintw (LINES - 1, 0, "%s? (D/N/O/r/*/!): ",
- bf ? _("Set flag") : _("Clear flag"));
- clrtoeol ();
-
- event = mutt_getch ();
- i = event.ch;
- if (i == -1) {
- CLEARLINE (LINES - 1);
- return (-1);
- }
-
- CLEARLINE (LINES - 1);
-
- switch (i) {
- case 'd':
- case 'D':
- flag = M_DELETE;
- break;
-
- case 'N':
- case 'n':
- flag = M_NEW;
- break;
-
- case 'o':
- case 'O':
- if (h)
- mutt_set_flag (Context, h, M_READ, !bf);
- else
- mutt_tag_set_flag (M_READ, !bf);
- flag = M_OLD;
- break;
-
- case 'r':
- case 'R':
- flag = M_REPLIED;
- break;
+ static char const actions[] = {
+ ['d'] = M_DELETE, ['D'] = M_DELETE,
+ ['n'] = M_NEW, ['N'] = M_NEW,
+ ['o'] = M_OLD, ['O'] = M_OLD,
+ ['r'] = M_REPLIED, ['R'] = M_REPLIED,
+ ['*'] = M_TAG,
+ ['!'] = M_FLAG,
+ };
+
+ int c;
+
+ mvwprintw(main_w, LINES - 1, 0, "%s? (D/N/O/r/*/!): ",
+ bf ? _("Set flag") : _("Clear flag"));
+ wclrtoeol(main_w);
+
+ c = mutt_getch().ch;
+ if (c == -1) {
+ CLEARLINE(main_w, LINES - 1);
+ return (-1);
+ }
- case '*':
- flag = M_TAG;
- break;
+ CLEARLINE(main_w, LINES - 1);
- case '!':
- flag = M_FLAG;
- break;
+ if (c < 0 || c > countof(actions) || !actions[c]) {
+ BEEP();
+ return -1;
+ }
- default:
- BEEP ();
- return (-1);
- }
+ if (actions[c] == M_OLD) {
+ if (h) {
+ mutt_set_flag(Context, h, M_READ, !bf);
+ } else {
+ mutt_tag_set_flag(M_READ, !bf);
+ }
+ }
- if (h)
- mutt_set_flag (Context, h, flag, bf);
- else
- mutt_tag_set_flag (flag, bf);
+ if (h) {
+ mutt_set_flag(Context, h, actions[c], bf);
+ } else {
+ mutt_tag_set_flag(actions[c], bf);
+ }
- return 0;
+ return 0;
}