]> granicus.if.org Git - neomutt/commitdiff
addrbook dialog
authorRichard Russon <rich@flatcap.org>
Thu, 26 Sep 2019 13:21:51 +0000 (14:21 +0100)
committerRichard Russon <rich@flatcap.org>
Sun, 27 Oct 2019 03:31:20 +0000 (03:31 +0000)
addrbook.c
dialog.c

index c40eb5e9967cb023a091d95abb9b58df3a70d535..4a83feb83fb97e2e1a3ee59562ab221978ee6116 100644 (file)
@@ -37,6 +37,7 @@
 #include "mutt.h"
 #include "alias.h"
 #include "curs_lib.h"
+#include "dialog.h"
 #include "format_flags.h"
 #include "globals.h"
 #include "keymap.h"
@@ -208,7 +209,28 @@ void mutt_alias_menu(char *buf, size_t buflen, struct AliasList *aliases)
     return;
   }
 
+  struct MuttWindow *root = mutt_window_new(MUTT_WIN_ORIENT_VERTICAL, MUTT_WIN_SIZE_MAXIMISE, MUTT_WIN_SIZE_UNLIMITED, MUTT_WIN_SIZE_UNLIMITED);
+  root->name = "addr-root";
+  struct MuttWindow *pager = mutt_window_new(MUTT_WIN_ORIENT_VERTICAL, MUTT_WIN_SIZE_MAXIMISE, MUTT_WIN_SIZE_UNLIMITED, MUTT_WIN_SIZE_UNLIMITED);
+  pager->name = "addr-pager";
+  struct MuttWindow *pbar = mutt_window_new(MUTT_WIN_ORIENT_VERTICAL, MUTT_WIN_SIZE_FIXED, 1, MUTT_WIN_SIZE_UNLIMITED);
+  pbar->name = "addr-bar";
+
+  struct Dialog *dialog = mutt_mem_calloc(1, sizeof (*dialog));
+  dialog->root = root;
+
+  mutt_window_add_child(root, pager);
+  mutt_window_add_child(root, pbar);
+
+  dialog_push(dialog);
+  win_dump();
+
   menu = mutt_menu_new(MENU_ALIAS);
+
+  menu->pagelen = pager->state.rows;
+  menu->indexwin = pager;
+  menu->statuswin = pbar;
+
   menu->menu_make_entry = alias_make_entry;
   menu->menu_tag = alias_tag;
   menu->title = _("Aliases");
@@ -229,7 +251,7 @@ new_aliases:
   mutt_mem_realloc(&alias_table, menu->max * sizeof(struct Alias *));
   menu->data = alias_table;
   if (!alias_table)
-    return;
+    goto mam_done;
 
   if (last)
     a = TAILQ_NEXT(last, entries);
@@ -307,7 +329,12 @@ new_aliases:
     mutt_addrlist_write(buf, buflen, &alias_table[t]->addr, true);
   }
 
+  FREE(&alias_table);
+
+mam_done:
   mutt_menu_pop_current(menu);
   mutt_menu_free(&menu);
-  FREE(&alias_table);
+  dialog_pop();
+  mutt_window_free(&root);
+  FREE(&dialog);
 }
index b7bb179e3bdb3c62f6789f5e83cddd810096466b..a71fb1a1ae6bcfcdc604e9c52d9e365a06a93226 100644 (file)
--- a/dialog.c
+++ b/dialog.c
@@ -17,6 +17,7 @@ void dialog_push(struct Dialog *dlg)
 
   TAILQ_INSERT_TAIL(&MuttDialogWindow->children, dlg->root, entries);
   dlg->root->state.visible = true;
+  mutt_window_reflow(MuttDialogWindow);
 }
 
 void dialog_pop(void)