]> granicus.if.org Git - neomutt/commitdiff
Add a menu stack to track current and past menus.
authorKevin McCarthy <kevin@8t8.us>
Mon, 27 Mar 2017 01:31:39 +0000 (18:31 -0700)
committerKevin McCarthy <kevin@8t8.us>
Mon, 27 Mar 2017 01:31:39 +0000 (18:31 -0700)
Change the pager to use a MENU, right now just to hold the refresh
state.

16 files changed:
addrbook.c
browser.c
compose.c
crypt-gpgme.c
curs_main.c
menu.c
mutt_menu.h
mutt_ssl.c
mutt_ssl_gnutls.c
pager.c
pgpkey.c
postpone.c
query.c
recvattach.c
remailer.c
smime.c

index a30881882d6a8771d1a7bc91146045a2e6fab988..9228a8dffed44d5d973c83bdbcda6c5450695eea 100644 (file)
@@ -154,6 +154,7 @@ void mutt_alias_menu (char *buf, size_t buflen, ALIAS *aliases)
   menu->tag = alias_tag;
   menu->title = _("Aliases");
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_ALIAS, AliasHelp);
+  mutt_push_current_menu (menu);
 
 new_aliases:
 
@@ -237,6 +238,7 @@ new_aliases:
     rfc822_write_address (buf, buflen, AliasTable[t]->addr, 1);
   }
 
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   FREE (&AliasTable);
   
index 1fca7d9ad4cedac123bb55bf22415926b4faa335..83edc5f352a2df41ee24fc7265eda2cc64fa0157 100644 (file)
--- a/browser.c
+++ b/browser.c
@@ -611,7 +611,7 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
   char helpstr[LONG_STRING];
   char title[STRING];
   struct browser_state state;
-  MUTTMENU *menu;
+  MUTTMENU *menu = NULL;
   struct stat st;
   int i, killPrefix = 0;
   int multiple = (flags & MUTT_SEL_MULTI)  ? 1 : 0;
@@ -722,6 +722,7 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
 
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_FOLDER,
     FolderHelp);
+  mutt_push_current_menu (menu);
 
   init_menu (&state, menu, title, sizeof (title), buffy);
 
@@ -908,7 +909,6 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
        }
 
        destroy_state (&state);
-       mutt_menuDestroy (&menu);
        goto bail;
 
       case OP_BROWSER_TELL:
@@ -1080,7 +1080,6 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
                  mutt_error _("Error scanning directory.");
                  if (examine_directory (menu, &state, LastDir, prefix) == -1)
                  {
-                   mutt_menuDestroy (&menu);
                    goto bail;
                  }
                }
@@ -1151,7 +1150,6 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
            else
            {
              mutt_error _("Error scanning directory.");
-             mutt_menuDestroy (&menu);
              goto bail;
            }
            killPrefix = 0;
@@ -1246,7 +1244,6 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
        {
          strfcpy (f, buf, flen);
          destroy_state (&state);
-         mutt_menuDestroy (&menu);
          goto bail;
        }
        MAYBE_REDRAW (menu->redraw);
@@ -1264,7 +1261,6 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
        {
          strfcpy (f, state.entry[menu->current].name, flen);
          destroy_state (&state);
-         mutt_menuDestroy (&menu);
          goto bail;
        }
        else
@@ -1296,7 +1292,13 @@ void _mutt_select_file (char *f, size_t flen, int flags, char ***files, int *num
   }
   
   bail:
-  
+
+  if (menu)
+  {
+    mutt_pop_current_menu (menu);
+    mutt_menuDestroy (&menu);
+  }
+
   if (!folder)
     strfcpy (LastDir, LastDirBackup, sizeof (LastDir));
   
index aa59506e1bc824fb3df0bbfd31a2862e3969f752..7230936b53d45f028a3ec0e98e94dc124cdbe284 100644 (file)
--- a/compose.c
+++ b/compose.c
@@ -516,6 +516,7 @@ int mutt_compose_menu (HEADER *msg,   /* structure for new message */
   menu->tag = mutt_tag_attach;
   menu->data = idx;
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_COMPOSE, ComposeHelp);
+  mutt_push_current_menu (menu);
 
   while (loop)
   {
@@ -1348,6 +1349,7 @@ int mutt_compose_menu (HEADER *msg,   /* structure for new message */
     }
   }
 
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
 
   if (idxlen)
index 26974b991e23c09a99ae1dbdc50ec3ac505f65e4..1a311796b1bfe295574f340bcedc921a538e9e17 100644 (file)
@@ -4031,6 +4031,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t *keys,
   menu->make_entry = crypt_entry;
   menu->help = helpstr;
   menu->data = key_table;
+  mutt_push_current_menu (menu);
 
   {
     const char *ts;
@@ -4139,6 +4140,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t *keys,
         }
     }
   
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   FREE (&key_table);
 
index 43417188e50655b944a9d2e8fe33117fb214d934..b92ab6edefdce8dfd91ddb6867d26285b5be1ebd 100644 (file)
@@ -519,6 +519,7 @@ int mutt_index_menu (void)
   menu->color = index_color;
   menu->current = ci_first_message ();
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MAIN, IndexHelp);
+  mutt_push_current_menu (menu);
 
   if (!attach_msg)
     mutt_buffy_check(1); /* force the buffy check after we enter the folder */
@@ -2454,6 +2455,7 @@ int mutt_index_menu (void)
     if (done) break;
   }
 
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   return (close);
 }
diff --git a/menu.c b/menu.c
index 3c45656b423595847e4046e3baf67a1c3ee06443..46debdb8b40d1476c002d32627ebb6952e75a5df 100644 (file)
--- a/menu.c
+++ b/menu.c
 
 char* SearchBuffers[MENU_MAX];
 
+/* These are used to track the active menus, for redraw operations. */
+static size_t MenuStackCount = 0;
+static size_t MenuStackLen = 0;
+static MUTTMENU **MenuStack = NULL;
+
 static void print_enriched_string (int attr, unsigned char *s, int do_color)
 {
   wchar_t wc;
@@ -709,6 +714,7 @@ MUTTMENU *mutt_new_menu (int menu)
   p->messagewin = MuttMessageWindow;
   p->color = default_color;
   p->search = menu_search_generic;
+
   return (p);
 }
 
@@ -727,6 +733,30 @@ void mutt_menuDestroy (MUTTMENU **p)
   FREE (p);            /* __FREE_CHECKED__ */
 }
 
+void mutt_push_current_menu (MUTTMENU *menu)
+{
+  if (MenuStackCount >= MenuStackLen)
+  {
+    MenuStackLen += 5;
+    safe_realloc (&MenuStack, MenuStackLen * sizeof(MUTTMENU *));
+  }
+
+  MenuStack[MenuStackCount++] = menu;
+}
+
+void mutt_pop_current_menu (MUTTMENU *menu)
+{
+  if (!MenuStackCount ||
+      (MenuStack[MenuStackCount - 1] != menu))
+  {
+    dprint (1, (debugfile, "mutt_pop_current_menu() called with inactive menu\n"));
+    return;
+  }
+
+  MenuStackCount--;
+}
+
+
 #define MUTT_SEARCH_UP   1
 #define MUTT_SEARCH_DOWN 2
 
index b229fd45e49775572c46627383bbb26425f909f4..3d0b6f817eac388906f3fea30bfe39050e92440c 100644 (file)
@@ -120,6 +120,8 @@ void mutt_ts_icon (char *);
 
 MUTTMENU *mutt_new_menu (int);
 void mutt_menuDestroy (MUTTMENU **);
+void mutt_push_current_menu (MUTTMENU *);
+void mutt_pop_current_menu (MUTTMENU *);
 int mutt_menuLoop (MUTTMENU *);
 
 /* used in both the index and pager index to make an entry. */
index 86c8fb50a51e04738aee039fb95217b29b34d7dc..0ce0150f2af2b65129ccd54699c30c811e11445a 100644 (file)
@@ -1170,6 +1170,8 @@ static int interactive_check_cert (X509 *cert, int idx, int len, SSL *ssl, int a
   FILE *fp;
   int allow_skip = 0;
 
+  mutt_push_current_menu (menu);
+
   menu->max = mutt_array_size (part) * 2 + 10;
   menu->dialog = (char **) safe_calloc (1, menu->max * sizeof (char *));
   for (i = 0; i < menu->max; i++)
@@ -1302,6 +1304,7 @@ static int interactive_check_cert (X509 *cert, int idx, int len, SSL *ssl, int a
     }
   }
   unset_option(OPTIGNOREMACROEVENTS);
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   set_option (OPTNEEDREDRAW);
   dprint (2, (debugfile, "ssl interactive_check_cert: done=%d\n", done));
index 121f2df5eabdd74692a3a0127a87261b0b51fcd9..5a799574ddda978cb79d8146e6e589ae9f8adbf3 100644 (file)
@@ -862,6 +862,7 @@ static int tls_check_one_certificate (const gnutls_datum_t *certdata,
   menu->dialog = (char **) safe_calloc (1, menu->max * sizeof (char *));
   for (i = 0; i < menu->max; i++)
     menu->dialog[i] = (char *) safe_calloc (1, SHORT_STRING * sizeof (char));
+  mutt_push_current_menu (menu);
 
   row = 0;
   strfcpy (menu->dialog[row], _("This certificate belongs to:"), SHORT_STRING);
@@ -1065,6 +1066,7 @@ static int tls_check_one_certificate (const gnutls_datum_t *certdata,
     }
   }
   unset_option (OPTIGNOREMACROEVENTS);
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   gnutls_x509_crt_deinit (cert);
 
diff --git a/pager.c b/pager.c
index 8a0e36d65ae65e0989155b93d028a0832f162a28..0f434c0f34f7fbe106716eea9522aa3842091d95 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -1595,7 +1595,6 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
   int i, j, ch = 0, rc = -1, hideQuoted = 0, q_level = 0, force_redraw = 0;
   int lines = 0, curline = 0, topline = 0, oldtopline = 0, err, first = 1;
   int r = -1, wrapped = 0, searchctx = 0;
-  int redraw = REDRAW_FULL;
   FILE *fp = NULL;
   LOFF_T last_pos = 0, last_offset = 0;
   int old_smart_wrap, old_markers;
@@ -1609,6 +1608,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
   mutt_window_t *pager_status_window = NULL;
   mutt_window_t *pager_window = NULL;
 
+  MUTTMENU *pager_menu = NULL;
   MUTTMENU *index = NULL;              /* the Pager Index (PI) */
   int indexlen = PagerIndexLines;      /* indexlen not always == PIL */
   int indicator = indexlen / 3;        /* the indicator line of the PI */
@@ -1669,11 +1669,14 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
   pager_status_window = safe_calloc (sizeof (mutt_window_t), 1);
   pager_window        = safe_calloc (sizeof (mutt_window_t), 1);
 
+  pager_menu = mutt_new_menu (MENU_PAGER);
+  mutt_push_current_menu (pager_menu);
+
   while (ch != -1)
   {
     mutt_curs_set (0);
 
-    if (redraw & REDRAW_FULL)
+    if (pager_menu->redraw & REDRAW_FULL)
     {
 #if ! (defined (USE_SLANG_CURSES) || defined (HAVE_RESIZETERM))
       mutt_reflow_windows ();
@@ -1740,7 +1743,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
          SearchBack = Resize->SearchBack;
        }
        lines = Resize->line;
-       redraw |= REDRAW_SIGWINCH;
+       pager_menu->redraw |= REDRAW_SIGWINCH;
 
        FREE (&Resize);
       }
@@ -1775,14 +1778,14 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
        menu_redraw_index(index);
       }
 
-      redraw |= REDRAW_BODY | REDRAW_INDEX | REDRAW_STATUS;
+      pager_menu->redraw |= REDRAW_BODY | REDRAW_INDEX | REDRAW_STATUS;
 #ifdef USE_SIDEBAR
-      redraw |= REDRAW_SIDEBAR;
+      pager_menu->redraw |= REDRAW_SIDEBAR;
 #endif
       mutt_show_error ();
     }
 
-    if (redraw & REDRAW_SIGWINCH)
+    if (pager_menu->redraw & REDRAW_SIGWINCH)
     {
       i = -1;
       j = -1;
@@ -1798,14 +1801,14 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
     }
 
 #ifdef USE_SIDEBAR
-    if ((redraw & REDRAW_SIDEBAR) || SidebarNeedsRedraw)
+    if ((pager_menu->redraw & REDRAW_SIDEBAR) || SidebarNeedsRedraw)
     {
       SidebarNeedsRedraw = 0;
       mutt_sb_draw ();
     }
 #endif
 
-    if ((redraw & REDRAW_BODY) || topline != oldtopline)
+    if ((pager_menu->redraw & REDRAW_BODY) || topline != oldtopline)
     {
       do {
         mutt_window_move (pager_window, 0, 0);
@@ -1841,10 +1844,10 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
       /* We are going to update the pager status bar, so it isn't
        * necessary to reset to normal color now. */
 
-      redraw |= REDRAW_STATUS; /* need to update the % seen */
+      pager_menu->redraw |= REDRAW_STATUS; /* need to update the % seen */
     }
 
-    if (redraw & REDRAW_STATUS)
+    if (pager_menu->redraw & REDRAW_STATUS)
     {
       struct hdr_format_info hfi;
       char pager_progress_str[4];
@@ -1885,7 +1888,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
       }
     }
 
-    if ((redraw & REDRAW_INDEX) && index)
+    if ((pager_menu->redraw & REDRAW_INDEX) && index)
     {
       /* redraw the pager_index indicator, because the
        * flags for this message might have changed. */
@@ -1901,7 +1904,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
       NORMAL_COLOR;
     }
 
-    redraw = 0;
+    pager_menu->redraw = 0;
 
     if (option(OPTBRAILLEFRIENDLY)) {
       if (brailleLine!=-1) {
@@ -1976,7 +1979,7 @@ mutt_pager (const char *banner, const char *fname, int flags, pager_t *extra)
        lastLine = 0;
        topline = 0;
 
-       redraw = REDRAW_FULL | REDRAW_SIGWINCH;
+       pager_menu->redraw = REDRAW_FULL | REDRAW_SIGWINCH;
        ch = 0;
       }
 
@@ -2273,14 +2276,14 @@ search_next:
          }
 
        }
-       redraw = REDRAW_BODY;
+       pager_menu->redraw = REDRAW_BODY;
        break;
 
       case OP_SEARCH_TOGGLE:
        if (SearchCompiled)
        {
          SearchFlag ^= MUTT_SEARCH;
-         redraw = REDRAW_BODY;
+         pager_menu->redraw = REDRAW_BODY;
        }
        break;
 
@@ -2290,7 +2293,7 @@ search_next:
        {
          InHelp = 1;
          mutt_help (MENU_PAGER);
-         redraw = REDRAW_FULL;
+         pager_menu->redraw = REDRAW_FULL;
          InHelp = 0;
        }
        else
@@ -2304,7 +2307,7 @@ search_next:
          if (hideQuoted && lineInfo[topline].type == MT_COLOR_QUOTED)
            topline = upNLines (1, lineInfo, topline, hideQuoted);
          else
-           redraw = REDRAW_BODY;
+           pager_menu->redraw = REDRAW_BODY;
        }
        break;
 
@@ -2361,7 +2364,7 @@ search_next:
 
       case OP_REDRAW:
        clearok (stdscr, TRUE);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_NULL:
@@ -2381,7 +2384,7 @@ search_next:
                              extra->idx, extra->idxlen,
                              extra->bdy);
         else
-          ci_bounce_message (extra->hdr, &redraw);
+          ci_bounce_message (extra->hdr, &pager_menu->redraw);
        break;
 
       case OP_RESEND:
@@ -2393,7 +2396,7 @@ search_next:
                              extra->bdy);
         else
          mutt_resend_message (NULL, extra->ctx, extra->hdr);
-        redraw = REDRAW_FULL;
+        pager_menu->redraw = REDRAW_FULL;
         break;
 
       case OP_CHECK_TRADITIONAL:
@@ -2413,7 +2416,7 @@ search_next:
          mutt_create_alias (extra->bdy->hdr->env, NULL);
         else
          mutt_create_alias (extra->hdr->env, NULL);
-       MAYBE_REDRAW (redraw);
+       MAYBE_REDRAW (pager_menu->redraw);
        break;
 
       case OP_PURGE_MESSAGE:
@@ -2427,7 +2430,7 @@ search_next:
        mutt_set_flag (Context, extra->hdr, MUTT_PURGE, (ch == OP_PURGE_MESSAGE));
         if (option (OPTDELETEUNTAG))
          mutt_set_flag (Context, extra->hdr, MUTT_TAG, 0);
-       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        if (option (OPTRESOLVE))
        {
          ch = -1;
@@ -2441,7 +2444,7 @@ search_next:
        CHECK_READONLY;
 
        if (mutt_change_flag (extra->hdr, (ch == OP_MAIN_SET_FLAG)) == 0)
-         redraw |= REDRAW_STATUS | REDRAW_INDEX;
+         pager_menu->redraw |= REDRAW_STATUS | REDRAW_INDEX;
        if (extra->hdr->deleted && option (OPTRESOLVE))
        {
          ch = -1;
@@ -2471,9 +2474,9 @@ search_next:
          }
 
          if (!option (OPTRESOLVE) && PagerIndexLines)
-           redraw = REDRAW_FULL;
+           pager_menu->redraw = REDRAW_FULL;
          else
-           redraw = REDRAW_STATUS | REDRAW_INDEX;
+           pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        }
        break;
 
@@ -2566,7 +2569,7 @@ search_next:
        }
 
        if (option (OPTFORCEREDRAWPAGER))
-         redraw = REDRAW_FULL;
+         pager_menu->redraw = REDRAW_FULL;
        unset_option (OPTFORCEREDRAWINDEX);
        unset_option (OPTFORCEREDRAWPAGER);
        break;
@@ -2578,7 +2581,7 @@ search_next:
        CHECK_ACL(MUTT_ACL_WRITE, "Cannot flag message");
 
        mutt_set_flag (Context, extra->hdr, MUTT_FLAG, !extra->hdr->flagged);
-       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        if (option (OPTRESOLVE))
        {
          ch = -1;
@@ -2592,7 +2595,7 @@ search_next:
          mutt_pipe_attachment_list (extra->fp, 0, extra->bdy, 0);
        else
          mutt_pipe_message (extra->hdr);
-       MAYBE_REDRAW (redraw);
+       MAYBE_REDRAW (pager_menu->redraw);
        break;
 
       case OP_PRINT:
@@ -2607,7 +2610,7 @@ search_next:
        CHECK_MODE(IsHeader (extra) && !IsAttach (extra));
         CHECK_ATTACH;      
        ci_send_message (0, NULL, NULL, extra->ctx, NULL);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_REPLY:
@@ -2619,14 +2622,14 @@ search_next:
                             SENDREPLY);
        else
          ci_send_message (SENDREPLY, NULL, NULL, extra->ctx, extra->hdr);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_RECALL_MESSAGE:
        CHECK_MODE(IsHeader (extra) && !IsAttach(extra));
         CHECK_ATTACH;
        ci_send_message (SENDPOSTPONED, NULL, NULL, extra->ctx, extra->hdr);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_GROUP_REPLY:
@@ -2637,7 +2640,7 @@ search_next:
                             extra->idxlen, extra->bdy, SENDREPLY|SENDGROUPREPLY);
         else
          ci_send_message (SENDREPLY | SENDGROUPREPLY, NULL, NULL, extra->ctx, extra->hdr);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_LIST_REPLY:
@@ -2648,7 +2651,7 @@ search_next:
                             extra->idxlen, extra->bdy, SENDREPLY|SENDLISTREPLY);
         else
          ci_send_message (SENDREPLY | SENDLISTREPLY, NULL, NULL, extra->ctx, extra->hdr);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_FORWARD_MESSAGE:
@@ -2659,7 +2662,7 @@ search_next:
                               extra->idxlen, extra->bdy);
         else
          ci_send_message (SENDFORWARD, NULL, NULL, extra->ctx, extra->hdr);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
       case OP_DECRYPT_SAVE:
@@ -2692,7 +2695,7 @@ search_next:
                               (ch == OP_DECODE_SAVE) || (ch == OP_DECODE_COPY),
                               (ch == OP_DECRYPT_SAVE) || (ch == OP_DECRYPT_COPY) ||
                               0,
-                              &redraw) == 0 && (ch == OP_SAVE || ch == OP_DECODE_SAVE
+                              &pager_menu->redraw) == 0 && (ch == OP_SAVE || ch == OP_DECODE_SAVE
                                                 || ch == OP_DECRYPT_SAVE
                                                 ))
        {
@@ -2702,14 +2705,14 @@ search_next:
            rc = OP_MAIN_NEXT_UNDELETED;
          }
          else
-           redraw |= REDRAW_STATUS | REDRAW_INDEX;
+           pager_menu->redraw |= REDRAW_STATUS | REDRAW_INDEX;
        }
-       MAYBE_REDRAW (redraw);
+       MAYBE_REDRAW (pager_menu->redraw);
        break;
 
       case OP_SHELL_ESCAPE:
        mutt_shell_escape ();
-       MAYBE_REDRAW (redraw);
+       MAYBE_REDRAW (pager_menu->redraw);
        break;
 
       case OP_TAG:
@@ -2720,7 +2723,7 @@ search_next:
          ((Context->last_tag == extra->hdr && !extra->hdr->tagged)
           ? NULL : Context->last_tag);
 
-       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        if (option (OPTRESOLVE))
        {
          ch = -1;
@@ -2740,7 +2743,7 @@ search_next:
          mutt_set_flag (Context, extra->hdr, MUTT_READ, 1);
        first = 0;
         Context->msgnotreadyet = -1;
-       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        if (option (OPTRESOLVE))
        {
          ch = -1;
@@ -2756,7 +2759,7 @@ search_next:
 
        mutt_set_flag (Context, extra->hdr, MUTT_DELETE, 0);
        mutt_set_flag (Context, extra->hdr, MUTT_PURGE, 0);
-       redraw = REDRAW_STATUS | REDRAW_INDEX;
+       pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        if (option (OPTRESOLVE))
        {
          ch = -1;
@@ -2786,9 +2789,9 @@ search_next:
          }
 
          if (!option (OPTRESOLVE) && PagerIndexLines)
-           redraw = REDRAW_FULL;
+           pager_menu->redraw = REDRAW_FULL;
          else
-           redraw = REDRAW_STATUS | REDRAW_INDEX;
+           pager_menu->redraw = REDRAW_STATUS | REDRAW_INDEX;
        }
        break;
 
@@ -2811,7 +2814,7 @@ search_next:
        mutt_view_attachments (extra->hdr);
        if (extra->hdr->attach_del)
          Context->changed = 1;
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
      case OP_EDIT_LABEL:
@@ -2819,7 +2822,7 @@ search_next:
         rc = mutt_label_message(extra->hdr);
         if (rc > 0) {
           Context->changed = 1;
-          redraw = REDRAW_FULL;
+          pager_menu->redraw = REDRAW_FULL;
           mutt_message (_("%d labels changed."), rc);
         }
         else {
@@ -2836,7 +2839,7 @@ search_next:
        CHECK_MODE(IsHeader(extra));
         CHECK_ATTACH;
        ci_send_message (SENDKEY, NULL, NULL, extra->ctx, extra->hdr);
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 
 
@@ -2852,7 +2855,7 @@ search_next:
         }
         CHECK_MODE(IsHeader(extra));
        crypt_extract_keys_from_messages(extra->hdr);
-        redraw = REDRAW_FULL;
+        pager_menu->redraw = REDRAW_FULL;
         break;
 
       case OP_WHAT_KEY:
@@ -2872,7 +2875,7 @@ search_next:
       case OP_SIDEBAR_TOGGLE_VISIBLE:
        toggle_option (OPTSIDEBAR);
         mutt_reflow_windows();
-       redraw = REDRAW_FULL;
+       pager_menu->redraw = REDRAW_FULL;
        break;
 #endif
 
@@ -2913,6 +2916,8 @@ search_next:
     SearchCompiled = 0;
   }
   FREE (&lineInfo);
+  mutt_pop_current_menu (pager_menu);
+  mutt_menuDestroy (&pager_menu);
   if (index)
     mutt_menuDestroy(&index);
 
index 36a92ae2c738bb28b65df7f9ccf3f62150f99035..c39f25ea6ca6e6bac1d0c0868b45f611653c3d3d 100644 (file)
--- a/pgpkey.c
+++ b/pgpkey.c
@@ -527,6 +527,7 @@ static pgp_key_t pgp_select_key (pgp_key_t keys,
   menu->make_entry = pgp_entry;
   menu->help = helpstr;
   menu->data = KeyTable;
+  mutt_push_current_menu (menu);
 
   if (p)
     snprintf (buf, sizeof (buf), _("PGP keys matching <%s>."), p->mailbox);
@@ -650,6 +651,7 @@ static pgp_key_t pgp_select_key (pgp_key_t keys,
     }
   }
 
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   FREE (&KeyTable);
 
index 4fe1543d4a6830edcdc34938dfe031d94c9fd1e9..7dcf30a1a200ab337183a64fca49dd98d47e63ff 100644 (file)
@@ -165,6 +165,7 @@ static HEADER *select_msg (void)
   menu->title = _("Postponed Messages");
   menu->data = PostContext;
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_POST, PostponeHelp);
+  mutt_push_current_menu (menu);
 
   /* The postponed mailbox is setup to have sorting disabled, but the global
    * Sort variable may indicate something different.   Sorting has to be
@@ -209,6 +210,7 @@ static HEADER *select_msg (void)
   }
 
   Sort = orig_sort;
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   return (r > -1 ? PostContext->hdrs[r] : NULL);
 }
diff --git a/query.c b/query.c
index a229a71a89d9845ef64407907363bec6ffa40065..aedc83269ab6220652fda1c162a81a4d7358d3b7 100644 (file)
--- a/query.c
+++ b/query.c
@@ -326,6 +326,7 @@ static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf)
   menu->tag = query_tag;
   menu->title = title;
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_QUERY, QueryHelp);
+  mutt_push_current_menu (menu);
 
   if (results == NULL)
   {
@@ -382,6 +383,7 @@ static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf)
 
 
              menu->current = 0;
+              mutt_pop_current_menu (menu);
              mutt_menuDestroy (&menu);
              menu = mutt_new_menu (MENU_QUERY);
              menu->make_entry = query_entry;
@@ -389,6 +391,7 @@ static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf)
              menu->tag = query_tag;
              menu->title = title;
              menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_QUERY, QueryHelp);
+              mutt_push_current_menu (menu);
 
              /* count the number of results */
              for (queryp = results; queryp; queryp = queryp->next)
@@ -538,5 +541,6 @@ static void query_menu (char *buf, size_t buflen, QUERY *results, int retbuf)
     set_option (OPTNEEDREDRAW);
   }
 
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
 }
index 562c6b553bf7b08fac7a1f948bae62f754e3d572..0f079b1235e771a5bcc0fcdf918ebc3f7f67fc15 100644 (file)
@@ -1041,6 +1041,7 @@ void mutt_view_attachments (HEADER *hdr)
   menu->make_entry = attach_entry;
   menu->tag = mutt_tag_attach;
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_ATTACH, AttachHelp);
+  mutt_push_current_menu (menu);
 
   mutt_attach_init (cur);
   attach_collapse (cur, 0, 1, 0);
@@ -1281,6 +1282,7 @@ void mutt_view_attachments (HEADER *hdr)
          mutt_free_body (&cur);
        }
 
+        mutt_pop_current_menu (menu);
        mutt_menuDestroy  (&menu);
        return;
     }
index 8f4e859533dbd8fd2b780eb8a6f42f80e96e229d..8e0434a3772525d74e294cb340c2034fd4723b30 100644 (file)
@@ -538,6 +538,7 @@ void mix_make_chain (LIST **chainp, int *redraw)
   menu->data = type2_list;
   menu->help = mutt_compile_help (helpstr, sizeof (helpstr), MENU_MIX, RemailerHelp);
   menu->pagelen = MIX_VOFFSET - 1;
+  mutt_push_current_menu (menu);
   
   while (loop) 
   {
@@ -673,6 +674,7 @@ void mix_make_chain (LIST **chainp, int *redraw)
     }
   }
   
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
 
   /* construct the remailer list */
diff --git a/smime.c b/smime.c
index 2fcb82c846f788d96b5bcd308ceaf2305b050b80..b12119ee330e473bb84c56f8d177d599bed85f73 100644 (file)
--- a/smime.c
+++ b/smime.c
@@ -447,6 +447,7 @@ static smime_key_t *smime_select_key (smime_key_t *keys, char *query)
   menu->help = helpstr;
   menu->data = table;
   menu->title = title;
+  mutt_push_current_menu (menu);
   /* sorting keys might be done later - TODO */
 
   mutt_clear_error();
@@ -493,6 +494,7 @@ static smime_key_t *smime_select_key (smime_key_t *keys, char *query)
     }
   }
 
+  mutt_pop_current_menu (menu);
   mutt_menuDestroy (&menu);
   FREE (&table);
   set_option (OPTNEEDREDRAW);