Rocco Rutte:
authorpdmef <pdmef@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Sun, 11 Sep 2005 11:15:43 +0000 (11:15 +0000)
committerpdmef <pdmef@e385b8ad-14ed-0310-8656-cc95a2468c6d>
Sun, 11 Sep 2005 11:15:43 +0000 (11:15 +0000)
- merge in latest mutt changes

git-svn-id: svn://svn.berlios.de/mutt-ng/trunk@506 e385b8ad-14ed-0310-8656-cc95a2468c6d

ChangeLog.mutt
VERSION.svn
curs_lib.c
imap/imap.c
menu.c

index e919f82..c56e8b7 100644 (file)
@@ -1,3 +1,13 @@
+2005-09-10 18:47:17  TAKAHASHI Tamotsu  <ttakah@lapis.plala.or.jp>  (brendan)
+
+       * menu.c: Correct some inconsistencies introduced by
+       $menu_context. Closes: #2019?
+
+2005-09-10 06:02:04  Brendan Cully  <brendan@kublai.com>  (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@kublai.com>  (brendan)
 
        * mutt_socket.c: Set CLOEXEC on sockets in IPv4 code path like we
index f573e99..80e3e6e 100644 (file)
@@ -1 +1 @@
-505
+506
index ee5a9b7..46f6d30 100644 (file)
@@ -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);
index cc9f60c..b69c6cb 100644 (file)
@@ -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 (file)
--- 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) {