Commit 1a374ae6 authored by Benjamin Poirier's avatar Benjamin Poirier Committed by Michal Marek

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: default avatarBenjamin Poirier <bpoirier@suse.de>
Signed-off-by: default avatarMichal Marek <mmarek@suse.cz>
parent 5e609add
...@@ -166,40 +166,12 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height, ...@@ -166,40 +166,12 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height,
case 'K': /* Previous line */ case 'K': /* Previous line */
case 'k': case 'k':
case KEY_UP: case KEY_UP:
if (!begin_reached) { if (begin_reached)
int passed_end = 0; break;
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;
}
print_position(dialog); back_lines(page_length + 1);
wmove(dialog, cur_y, cur_x); /* Restore cursor position */ refresh_text_box(dialog, box, boxh, boxw, cur_y,
wrefresh(dialog); cur_x);
}
break; break;
case 'B': /* Previous page */ case 'B': /* Previous page */
case 'b': case 'b':
...@@ -214,17 +186,12 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height, ...@@ -214,17 +186,12 @@ int dialog_textbox(const char *title, const char *tbuf, int initial_height,
case 'J': /* Next line */ case 'J': /* Next line */
case 'j': case 'j':
case KEY_DOWN: case KEY_DOWN:
if (!end_reached) { if (end_reached)
begin_reached = 0; break;
scrollok(box, TRUE);
scroll(box); /* Scroll box region up one line */ back_lines(page_length - 1);
scrollok(box, FALSE); refresh_text_box(dialog, box, boxh, boxw, cur_y,
print_line(box, boxh - 1, boxw); cur_x);
wnoutrefresh(box);
print_position(dialog);
wmove(dialog, cur_y, cur_x); /* Restore cursor position */
wrefresh(dialog);
}
break; break;
case KEY_NPAGE: /* Next page */ case KEY_NPAGE: /* Next page */
case ' ': case ' ':
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment