lkml.org 
[lkml]   [2012]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/6] menuconfig: Do not open code textbox scroll up/down
    Date
    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>
    ---
    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 ' ':
    --
    1.7.7


    \
     
     \ /
      Last update: 2012-07-30 22:41    [W:0.028 / U:0.072 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site