X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=menu.c;h=eb19d5abeeca52ea86d43e661c3ff8a6850aa1d2;hp=39e5f0df484b9ddf3e381749ed4d70881723781d;hb=8a17bff34ca04d10ef28a3d2d4b00343afd220e9;hpb=b25e26b05ff3172041861e032cb839871367a480 diff --git a/menu.c b/menu.c index 39e5f0d..eb19d5a 100644 --- a/menu.c +++ b/menu.c @@ -11,6 +11,10 @@ # include "config.h" #endif +#include +#include +#include + #include "mutt.h" #include "enter.h" #include "mutt_curses.h" @@ -18,18 +22,12 @@ #include "mbyte.h" #include "sidebar.h" -#ifdef USE_IMAP -#include "imap.h" -#endif - -#include "lib/mem.h" -#include "lib/intl.h" -#include "lib/str.h" +#include #include #include -extern int Charset_is_utf8; /* FIXME: bad modularisation */ +#define SW (option(OPTMBOXPANE)?SidebarWidth:0) extern size_t UngetCount; @@ -37,10 +35,10 @@ static void print_enriched_string (int attr, unsigned char *s, int do_color) { wchar_t wc; size_t k; - size_t n = str_len ((char *) s); + size_t n = m_strlen((char *) s); mbstate_t mbstate; - memset (&mbstate, 0, sizeof (mbstate)); + p_clear(&mbstate, 1); while (*s) { if (*s < M_TREE_MAX) { if (do_color) @@ -139,7 +137,7 @@ static void print_enriched_string (int attr, unsigned char *s, int do_color) static void menu_make_entry (char *s, int l, MUTTMENU * menu, int i) { if (menu->dialog) { - strncpy (s, menu->dialog[i], l); + m_strcpy(s, l, menu->dialog[i]); menu->current = -1; /* hide menubar */ } else @@ -150,16 +148,16 @@ void menu_pad_string (char *s, size_t n) { int shift = option (OPTARROWCURSOR) ? 3 : 0; int cols; - char *tmpbuf = mem_malloc (n); + char *tmpbuf = p_new(char, n); if (option (OPTMBOXPANE)) cols = COLS - shift - SidebarWidth; else cols = COLS - shift; - mutt_format_string (tmpbuf, n, cols, cols, 0, ' ', s, str_len (s), 1); + mutt_format_string (tmpbuf, n, cols, cols, 0, ' ', s, m_strlen(s), 1); tmpbuf[n - 1] = 0; snprintf (s, n, "%s", tmpbuf); /* overkill */ - mem_free (&tmpbuf); + p_delete(&tmpbuf); } void menu_redraw_full (MUTTMENU * menu) @@ -171,8 +169,8 @@ void menu_redraw_full (MUTTMENU * menu) if (option (OPTHELP)) { SETCOLOR (MT_COLOR_STATUS); - move (option (OPTSTATUSONTOP) ? LINES - 2 : 0, 0); - mutt_paddstr (COLS, menu->help); + move (option (OPTSTATUSONTOP) ? LINES - 2 : 0, SW); + mutt_paddstr (COLS-SW, menu->help); SETCOLOR (MT_COLOR_NORMAL); menu->offset = 1; menu->pagelen = LINES - 3; @@ -182,6 +180,8 @@ void menu_redraw_full (MUTTMENU * menu) menu->pagelen = LINES - 2; } + sidebar_draw_frames(); + mutt_show_error (); menu->redraw = REDRAW_INDEX | REDRAW_STATUS; @@ -193,10 +193,11 @@ void menu_redraw_status (MUTTMENU * menu) snprintf (buf, sizeof (buf), M_MODEFMT, menu->title); SETCOLOR (MT_COLOR_STATUS); - move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, 0); - mutt_paddstr (COLS, buf); + move (option (OPTSTATUSONTOP) ? 0 : LINES - 2, SW); + mutt_paddstr (COLS-SW, buf); SETCOLOR (MT_COLOR_NORMAL); menu->redraw &= ~REDRAW_STATUS; + sidebar_draw_frames(); } void menu_redraw_index (MUTTMENU * menu) @@ -204,7 +205,6 @@ void menu_redraw_index (MUTTMENU * menu) char buf[STRING]; int i; - sidebar_draw (1); for (i = menu->top; i < menu->top + menu->pagelen; i++) { if (i < menu->max) { menu_make_entry (buf, sizeof (buf), menu, i); @@ -217,18 +217,20 @@ void menu_redraw_index (MUTTMENU * menu) if (i == menu->current) { attrset (menu->color (i)); ADDCOLOR (MT_COLOR_INDICATOR); + BKGDSET (MT_COLOR_INDICATOR); addstr ("->"); attrset (menu->color (i)); addch (' '); } else { attrset (menu->color (i)); - move (i - menu->top + menu->offset, SidebarWidth); + move (i - menu->top + menu->offset, SW); addstr (" "); } print_enriched_string (menu->color (i), (unsigned char *) buf, 1); SETCOLOR (MT_COLOR_NORMAL); + BKGDSET (MT_COLOR_NORMAL); } else { attrset (menu->color (i)); @@ -239,6 +241,8 @@ void menu_redraw_index (MUTTMENU * menu) } CLEARLINE_WIN (i - menu->top + menu->offset); + + move (i - menu->top + menu->offset, SW); print_enriched_string (menu->color (i), (unsigned char *) buf, i != menu->current); SETCOLOR (MT_COLOR_NORMAL); @@ -248,6 +252,9 @@ void menu_redraw_index (MUTTMENU * menu) else CLEARLINE_WIN (i - menu->top + menu->offset); } + sidebar_draw (1); +/* sidebar_draw_frames(); */ + menu->redraw = 0; } @@ -260,7 +267,7 @@ void menu_redraw_motion (MUTTMENU * menu) return; } - move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth); + move (menu->oldcurrent + menu->offset - menu->top, SW); SETCOLOR (MT_COLOR_NORMAL); BKGDSET (MT_COLOR_NORMAL); @@ -273,14 +280,14 @@ void menu_redraw_motion (MUTTMENU * menu) clrtoeol (); menu_make_entry (buf, sizeof (buf), menu, menu->oldcurrent); menu_pad_string (buf, sizeof (buf)); - move (menu->oldcurrent + menu->offset - menu->top, SidebarWidth + 3); + move (menu->oldcurrent + menu->offset - menu->top, SW + 3); print_enriched_string (menu->color (menu->oldcurrent), (unsigned char *) buf, 1); SETCOLOR (MT_COLOR_NORMAL); } /* now draw it in the new location */ - move (menu->current + menu->offset - menu->top, SidebarWidth); + move (menu->current + menu->offset - menu->top, SW); attrset (menu->color (menu->current)); ADDCOLOR (MT_COLOR_INDICATOR); addstr ("->"); @@ -302,6 +309,7 @@ void menu_redraw_motion (MUTTMENU * menu) ADDCOLOR (MT_COLOR_INDICATOR); BKGDSET (MT_COLOR_INDICATOR); CLEARLINE_WIN (menu->current - menu->top + menu->offset); + move (menu->current + menu->offset - menu->top, SW); print_enriched_string (menu->color (menu->current), (unsigned char *) buf, 0); SETCOLOR (MT_COLOR_NORMAL); @@ -314,7 +322,7 @@ void menu_redraw_current (MUTTMENU * menu) { char buf[STRING]; - move (menu->current + menu->offset - menu->top, SidebarWidth); + move (menu->current + menu->offset - menu->top, SW); menu_make_entry (buf, sizeof (buf), menu, menu->current); menu_pad_string (buf, sizeof (buf)); @@ -373,23 +381,18 @@ void menu_check_recenter (MUTTMENU * menu) menu->top = 0; set_option (OPTNEEDREDRAW); } - } - else if (menu->current >= menu->top + menu->pagelen - c) { /* indicator below bottom threshold */ - if (option (OPTMENUSCROLL) || (menu->pagelen <= 0)) - menu->top = menu->current - menu->pagelen + c + 1; - else - menu->top += - (menu->pagelen - - c) * ((menu->current - menu->top) / (menu->pagelen - c)) - c; - } - else if (menu->current < menu->top + c) { /* indicator above top threshold */ - if (option (OPTMENUSCROLL) || (menu->pagelen <= 0)) - menu->top = menu->current - c; - else - menu->top -= - (menu->pagelen - - c) * ((menu->top + menu->pagelen - 1 - - menu->current) / (menu->pagelen - c)) - c; + } else { + if (option (OPTMENUSCROLL) || (menu->pagelen <= 0) || (c < MenuContext)) { + if (menu->current < menu->top + c) + menu->top = menu->current - c; + else if (menu->current >= menu->top + menu->pagelen - c) + menu->top = menu->current - menu->pagelen + c + 1; + } else { + if (menu->current < menu->top + c) + menu->top -= (menu->pagelen - c) * ((menu->top + menu->pagelen - 1 - menu->current) / (menu->pagelen - c)) - c; + else if ((menu->current >= menu->top + menu->pagelen - c)) + menu->top += (menu->pagelen - c) * ((menu->current - menu->top) / (menu->pagelen - c)) - c; + } } if (!option (OPTMENUMOVEOFF)) /* make entries stick to bottom */ @@ -637,7 +640,7 @@ static int menu_search_generic (MUTTMENU * m, regex_t * re, int n) MUTTMENU *mutt_new_menu (void) { - MUTTMENU *p = (MUTTMENU *) mem_calloc (1, sizeof (MUTTMENU)); + MUTTMENU *p = p_new(MUTTMENU, 1); p->current = 0; p->top = 0; @@ -653,16 +656,16 @@ void mutt_menuDestroy (MUTTMENU ** p) { int i; - mem_free (&(*p)->searchBuf); + p_delete(&(*p)->searchBuf); if ((*p)->dialog) { for (i = 0; i < (*p)->max; i++) - mem_free (&(*p)->dialog[i]); + p_delete(&(*p)->dialog[i]); - mem_free (&(*p)->dialog); + p_delete(&(*p)->dialog); } - mem_free (p); + p_delete(p); } #define M_SEARCH_UP 1 @@ -676,12 +679,12 @@ static int menu_search (MUTTMENU * menu, int op) char buf[SHORT_STRING]; if (op != OP_SEARCH_NEXT && op != OP_SEARCH_OPPOSITE) { - strfcpy (buf, menu->searchBuf ? menu->searchBuf : "", sizeof (buf)); + m_strcpy(buf, sizeof(buf), NONULL(menu->searchBuf)); if (mutt_get_field ((op == OP_SEARCH) ? _("Search for: ") : _("Reverse search for: "), buf, sizeof (buf), M_CLEAR) != 0 || !buf[0]) return (-1); - str_replace (&menu->searchBuf, buf); + m_strreplace(&menu->searchBuf, buf); menu->searchDir = (op == OP_SEARCH) ? M_SEARCH_DOWN : M_SEARCH_UP; } else { @@ -794,7 +797,7 @@ int mutt_menuLoop (MUTTMENU * menu) { int i = OP_NULL; - FOREVER { + for (;;) { if (option (OPTMENUCALLER)) { unset_option (OPTMENUCALLER); return OP_NULL; @@ -802,10 +805,7 @@ int mutt_menuLoop (MUTTMENU * menu) mutt_curs_set (0); - -#ifdef USE_IMAP imap_keepalive (); -#endif if (menu_redraw (menu) == OP_REDRAW) return OP_REDRAW; @@ -813,9 +813,9 @@ int mutt_menuLoop (MUTTMENU * menu) menu->oldcurrent = menu->current; if (option (OPTARROWCURSOR)) - move (menu->current - menu->top + menu->offset, 2); + move (menu->current - menu->top + menu->offset, SW + 2); else if (option (OPTBRAILLEFRIENDLY)) - move (menu->current - menu->top + menu->offset, 0); + move (menu->current - menu->top + menu->offset, SW); else move (menu->current - menu->top + menu->offset, COLS - 1); @@ -996,6 +996,10 @@ int mutt_menuLoop (MUTTMENU * menu) mutt_what_key (); break; + case OP_REBUILD_CACHE: + mx_rebuild_cache (); + break; + case OP_REDRAW: clearok (stdscr, TRUE); menu->redraw = REDRAW_FULL;