From: Thomas Roessler Date: Tue, 1 Nov 2005 08:42:00 +0000 (+0000) Subject: This should be a better patch for the menu break dance. X-Git-Tag: mutt-1-5-12-rel~272 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba8692c0a8fd1239bad6606ad33cbc23ba86674f;p=mutt This should be a better patch for the menu break dance. --- diff --git a/menu.c b/menu.c index 2c4caada..a4bfb397 100644 --- a/menu.c +++ b/menu.c @@ -384,19 +384,32 @@ void menu_check_recenter (MUTTMENU *menu) 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; - 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 */ + else { - 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; + /* + * If c = menu->pagelen / 2 and menu->pagelen is even, then (obviously): + * + * menu->top + menu->pagelen - c == menu->top + c + * + * In that case, having an "else if" below leads to what has become known as the + * indicator break dance effect. Instead of special-casing, we just forget the + * "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; + } + 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; + } } if (!option (OPTMENUMOVEOFF)) /* make entries stick to bottom */