diff options
author | Benjamin Poirier <bpoirier@suse.de> | 2012-08-23 14:55:07 -0400 |
---|---|---|
committer | Michal Marek <mmarek@suse.cz> | 2012-09-27 18:09:24 +0200 |
commit | 1a374ae6191e9c440f1953a264a94d38173737be (patch) | |
tree | d242376e9d1d57e824e9b8c14a71ef5b446ee495 /scripts | |
parent | 5e609addb1bd963ce1a1929f2012c8dd04ca8620 (diff) | |
download | op-kernel-dev-1a374ae6191e9c440f1953a264a94d38173737be.zip op-kernel-dev-1a374ae6191e9c440f1953a264a94d38173737be.tar.gz |
menuconfig: Do not open code textbox scroll up/down
We don't need to explicitely use ncurses' scroll(). ncurses performs
vertical-motion optimization at wrefresh() time.
Using strace I confirmed that with the following patch curses still sends only
the new line of text to the terminal when scrolling up/down one line at a
time.
Signed-off-by: Benjamin Poirier <bpoirier@suse.de>
Signed-off-by: Michal Marek <mmarek@suse.cz>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/kconfig/lxdialog/textbox.c | 55 |
1 files changed, 11 insertions, 44 deletions
diff --git a/scripts/kconfig/lxdialog/textbox.c b/scripts/kconfig/lxdialog/textbox.c index 506a095..3b3c5c4 100644 --- a/scripts/kconfig/lxdialog/textbox.c +++ b/scripts/kconfig/lxdialog/textbox.c @@ -166,40 +166,12 @@ do_resize: case 'K': /* Previous line */ case 'k': case KEY_UP: - if (!begin_reached) { - int passed_end = 0; - - back_lines(page_length + 1); - - /* We don't call print_page() here but use - * scrolling to ensure faster screen update. - * However, 'end_reached' and 'page_length' - * should still be updated, and 'page' should - * point to start of next page. This is done - * by calling get_line() in the following - * 'for' loop. */ - scrollok(box, TRUE); - wscrl(box, -1); /* Scroll box region down one line */ - scrollok(box, FALSE); - page_length = 0; - for (i = 0; i < boxh; i++) { - if (!i) { - /* print first line of page */ - print_line(box, 0, boxw); - wnoutrefresh(box); - } else - /* Called to update 'end_reached' and 'page' */ - get_line(); - if (!passed_end) - page_length++; - if (end_reached && !passed_end) - passed_end = 1; - } + if (begin_reached) + break; - print_position(dialog); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); - } + back_lines(page_length + 1); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x); break; case 'B': /* Previous page */ case 'b': @@ -214,17 +186,12 @@ do_resize: case 'J': /* Next line */ case 'j': case KEY_DOWN: - if (!end_reached) { - begin_reached = 0; - scrollok(box, TRUE); - scroll(box); /* Scroll box region up one line */ - scrollok(box, FALSE); - print_line(box, boxh - 1, boxw); - wnoutrefresh(box); - print_position(dialog); - wmove(dialog, cur_y, cur_x); /* Restore cursor position */ - wrefresh(dialog); - } + if (end_reached) + break; + + back_lines(page_length - 1); + refresh_text_box(dialog, box, boxh, boxw, cur_y, + cur_x); break; case KEY_NPAGE: /* Next page */ case ' ': |