Index: interface_elements.c =================================================================== --- interface_elements.c (revision 2245) +++ interface_elements.c (working copy) @@ -1810,6 +1810,7 @@ } lists_strs_free (lyrics_array); } + static void main_win_draw (struct main_win *w) { int i; @@ -2166,22 +2167,27 @@ get_keys_help (&help_lines); - if ((k->type == IFACE_KEY_FUNCTION && ( - k->key.func == KEY_DOWN - || k->key.func == KEY_NPAGE)) - || (k->key.ucs == '\n')) { + if ((k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_DOWN) + || k->key.ucs == '\n') { if (w->help_screen_top + LINES - 5 <= help_lines) w->help_screen_top++; } - else { - if (k->type == IFACE_KEY_FUNCTION && (k->key.func == KEY_UP - || k->key.func == KEY_PPAGE)) { - if (w->help_screen_top > 0) - w->help_screen_top--; - } - else if (k->key.func != KEY_RESIZE) - w->in_help = 0; + else if (k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_NPAGE) { + w->help_screen_top += LINES - 7; + if (w->help_screen_top > help_lines - LINES + 6) + w->help_screen_top = help_lines - LINES + 6; } + else if (k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_UP) { + if (w->help_screen_top > 0) + w->help_screen_top--; + } + else if (k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_PPAGE) { + w->help_screen_top -= LINES - 7; + if (w->help_screen_top < 0) + w->help_screen_top = 0; + } + else if (k->key.func != KEY_RESIZE) + w->in_help = 0; main_win_draw (w); } @@ -2195,25 +2201,33 @@ assert (w != NULL); assert (w->in_lyrics); - if ((k->type == IFACE_KEY_FUNCTION && ( - k->key.func == KEY_DOWN - || k->key.func == KEY_NPAGE)) - || (k->key.ucs == '\n')) { + if ((k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_DOWN) + || k->key.ucs == '\n') { getmaxyx (w->win, height, width); lyrics_array = lyrics_format (height, width); if (w->lyrics_screen_top + LINES - 5 <= lists_strs_size (lyrics_array)) w->lyrics_screen_top++; lists_strs_free (lyrics_array); } - else { - if (k->type == IFACE_KEY_FUNCTION && (k->key.func == KEY_UP - || k->key.func == KEY_PPAGE)) { - if (w->lyrics_screen_top > 0) - w->lyrics_screen_top--; - } - else if (k->key.func != KEY_RESIZE) - w->in_lyrics = 0; + else if (k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_NPAGE) { + getmaxyx (w->win, height, width); + lyrics_array = lyrics_format (height, width); + w->lyrics_screen_top += LINES - 7; + if (w->lyrics_screen_top > lists_strs_size (lyrics_array) - LINES + 6) + w->lyrics_screen_top = lists_strs_size (lyrics_array) - LINES + 6; + lists_strs_free (lyrics_array); } + else if (k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_UP) { + if (w->lyrics_screen_top > 0) + w->lyrics_screen_top--; + } + else if (k->type == IFACE_KEY_FUNCTION && k->key.func == KEY_PPAGE) { + w->lyrics_screen_top -= LINES - 7; + if (w->lyrics_screen_top < 0) + w->lyrics_screen_top = 0; + } + else if (k->key.func != KEY_RESIZE) + w->in_lyrics = 0; main_win_draw (w); }