From b25e26b05ff3172041861e032cb839871367a480 Mon Sep 17 00:00:00 2001 From: pdmef Date: Sun, 11 Sep 2005 11:15:43 +0000 Subject: [PATCH] Rocco Rutte: - merge in latest mutt changes git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@506 e385b8ad-14ed-0310-8656-cc95a2468c6d --- ChangeLog.mutt | 10 ++++ VERSION.svn | 2 +- curs_lib.c | 2 +- imap/imap.c | 2 +- menu.c | 124 +++++++++++++++++++++---------------------------- 5 files changed, 65 insertions(+), 75 deletions(-) diff --git a/ChangeLog.mutt b/ChangeLog.mutt index e919f82..c56e8b7 100644 --- a/ChangeLog.mutt +++ b/ChangeLog.mutt @@ -1,3 +1,13 @@ +2005-09-10 18:47:17 TAKAHASHI Tamotsu (brendan) + + * menu.c: Correct some inconsistencies introduced by + $menu_context. Closes: #2019? + +2005-09-10 06:02:04 Brendan Cully (brendan) + + * imap/imap.c, curs_lib.c: A pair of small optimisations to the + progress bar. + 2005-09-08 16:37:59 Brendan Cully (brendan) * mutt_socket.c: Set CLOEXEC on sockets in IPv4 code path like we diff --git a/VERSION.svn b/VERSION.svn index f573e99..80e3e6e 100644 --- a/VERSION.svn +++ b/VERSION.svn @@ -1 +1 @@ -505 +506 diff --git a/curs_lib.c b/curs_lib.c index ee5a9b7..46f6d30 100644 --- a/curs_lib.c +++ b/curs_lib.c @@ -327,7 +327,7 @@ void mutt_progress_bar (progress_t* progress, long pos) { if (!NetInc) return; - if (pos > progress->pos + (NetInc << 10)) { + if (pos >= progress->pos + (NetInc << 10)) { progress->pos = pos; pos = pos / (NetInc << 10) * (NetInc << 10); mutt_pretty_size (posstr, sizeof (posstr), pos); diff --git a/imap/imap.c b/imap/imap.c index cc9f60c..b69c6cb 100644 --- a/imap/imap.c +++ b/imap/imap.c @@ -211,7 +211,7 @@ int imap_read_literal (FILE * fp, IMAP_DATA * idata, long bytes, progress_t* bar r = 0; #endif fputc (c, fp); - if (bar && pos % 1024) + if (bar && !(pos % 1024)) mutt_progress_bar (bar, pos); #ifdef DEBUG if (DebugLevel >= IMAP_LOG_LTRL) diff --git a/menu.c b/menu.c index 404dc79..39e5f0d 100644 --- a/menu.c +++ b/menu.c @@ -457,55 +457,75 @@ void menu_prev_line (MUTTMENU * menu) mutt_error _("You cannot scroll up farther."); } -void menu_next_page (MUTTMENU * menu) -{ +/* + * pageup: jumplen == -pagelen + * pagedown: jumplen == pagelen + * halfup: jumplen == -pagelen/2 + * halfdown: jumplen == pagelen/2 + */ +#define DIRECTION ((neg * 2) + 1) +void menu_length_jump (MUTTMENU *menu, int jumplen) { + int tmp, neg = (jumplen >= 0) ? 0 : -1; + int c = MIN (MenuContext, menu->pagelen / 2); + if (menu->max) { - if (menu->top + menu->pagelen < menu->max) { - menu->top += menu->pagelen; - if (menu->current < menu->top) - menu->current = menu->top; + /* possible to scroll? */ + if (DIRECTION * menu->top < + (tmp = (neg ? 0 : (menu->max /*-1*/) - (menu->pagelen /*-1*/)))) { + menu->top += jumplen; + + /* jumped too long? */ + if ((neg || !option (OPTMENUMOVEOFF)) && DIRECTION * menu->top > tmp) + menu->top = tmp; + + /* need to move the cursor? */ + if ((DIRECTION * + (tmp = (menu->current - (menu->top + + (neg ? (menu->pagelen - 1) - c : c))))) < 0) + menu->current -= tmp; + menu->redraw = REDRAW_INDEX; } - else if (menu->current != menu->max - 1 && !menu->dialog) { - menu->current = menu->max - 1; + else if (menu->current != (neg ? 0 : menu->max - 1) && !menu->dialog) { + menu->current += jumplen; menu->redraw = REDRAW_MOTION; } else - mutt_error _("You are on the last page."); + mutt_error (neg ? _("You are on the first page.") + : _("You are on the last page.")); + + menu->current = MIN (menu->current, menu->max - 1); + menu->current = MAX (menu->current, 0); } else mutt_error _("No entries."); } +#undef DIRECTION -void menu_prev_page (MUTTMENU * menu) -{ - int c = MIN (MenuContext, menu->pagelen / 2); +void menu_next_page (MUTTMENU *menu) { + menu_length_jump (menu, MAX (menu->pagelen /* - MenuOverlap */, 0)); +} - if (menu->top > c) { - if ((menu->top -= menu->pagelen) < 0) - menu->top = 0; - if (menu->current >= menu->top + menu->pagelen) - menu->current = menu->top + menu->pagelen - 1; - menu->redraw = REDRAW_INDEX; - } - else if (menu->current && !menu->dialog) { - menu->current = 0; - menu->redraw = REDRAW_MOTION; - } - else - mutt_error _("You are on the first page."); +void menu_prev_page (MUTTMENU *menu) { + menu_length_jump (menu, 0 - MAX (menu->pagelen /* - MenuOverlap */, 0)); } -void menu_top_page (MUTTMENU * menu) -{ +void menu_half_down (MUTTMENU *menu) { + menu_length_jump (menu, menu->pagelen / 2); +} + +void menu_half_up (MUTTMENU *menu) { + menu_length_jump (menu, 0 - menu->pagelen / 2); +} + +void menu_top_page (MUTTMENU *menu) { if (menu->current != menu->top) { menu->current = menu->top; menu->redraw = REDRAW_MOTION; } } -void menu_bottom_page (MUTTMENU * menu) -{ +void menu_bottom_page (MUTTMENU *menu) { if (menu->max) { menu->current = menu->top + menu->pagelen - 1; if (menu->current > menu->max - 1) @@ -516,8 +536,7 @@ void menu_bottom_page (MUTTMENU * menu) mutt_error _("No entries."); } -void menu_middle_page (MUTTMENU * menu) -{ +void menu_middle_page (MUTTMENU *menu) { int i; if (menu->max) { @@ -531,8 +550,7 @@ void menu_middle_page (MUTTMENU * menu) mutt_error _("No entries."); } -void menu_first_entry (MUTTMENU * menu) -{ +void menu_first_entry (MUTTMENU *menu) { if (menu->max) { menu->current = 0; menu->redraw = REDRAW_MOTION; @@ -541,8 +559,7 @@ void menu_first_entry (MUTTMENU * menu) mutt_error _("No entries."); } -void menu_last_entry (MUTTMENU * menu) -{ +void menu_last_entry (MUTTMENU *menu) { if (menu->max) { menu->current = menu->max - 1; menu->redraw = REDRAW_MOTION; @@ -551,43 +568,6 @@ void menu_last_entry (MUTTMENU * menu) mutt_error _("No entries."); } -void menu_half_up (MUTTMENU * menu) -{ - if (menu->top > 0) { - if ((menu->top -= menu->pagelen / 2) < 0) - menu->top = 0; - if (menu->current >= menu->top + menu->pagelen) - menu->current = menu->top + menu->pagelen - 1; - menu->redraw = REDRAW_INDEX; - } - else if (menu->current && !menu->dialog) { - menu->current = 0; - menu->redraw = REDRAW_MOTION; - } - else - mutt_error _("First entry is shown."); -} - -void menu_half_down (MUTTMENU * menu) -{ - if (menu->max) { - if (menu->top + menu->pagelen < menu->max) { - menu->top += menu->pagelen / 2; - if (menu->current < menu->top) - menu->current = menu->top; - menu->redraw = REDRAW_INDEX; - } - else if (menu->current != menu->max - 1 && !menu->dialog) { - menu->current = menu->max - 1; - menu->redraw = REDRAW_INDEX; - } - else - mutt_error _("Last entry is shown."); - } - else - mutt_error _("No entries."); -} - void menu_current_top (MUTTMENU * menu) { if (menu->max) { -- 2.20.1