diff options
| -rw-r--r-- | scripts/lxdialog/menubox.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/scripts/lxdialog/menubox.c b/scripts/lxdialog/menubox.c index 89fcf418a07a..461ee08edc05 100644 --- a/scripts/lxdialog/menubox.c +++ b/scripts/lxdialog/menubox.c | |||
| @@ -94,9 +94,9 @@ static void print_item(WINDOW * win, const char *item, int choice, | |||
| 94 | } | 94 | } |
| 95 | if (selected) { | 95 | if (selected) { |
| 96 | wmove(win, choice, ITEM_IDENT + 1); | 96 | wmove(win, choice, ITEM_IDENT + 1); |
| 97 | wrefresh(win); | ||
| 98 | } | 97 | } |
| 99 | free(menu_item); | 98 | free(menu_item); |
| 99 | wrefresh(win); | ||
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | /* | 102 | /* |
| @@ -125,6 +125,7 @@ static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, | |||
| 125 | 125 | ||
| 126 | y = y + height + 1; | 126 | y = y + height + 1; |
| 127 | wmove(win, y, x); | 127 | wmove(win, y, x); |
| 128 | wrefresh(win); | ||
| 128 | 129 | ||
| 129 | if ((height < item_no) && (scroll + height < item_no)) { | 130 | if ((height < item_no) && (scroll + height < item_no)) { |
| 130 | wattrset(win, darrow_attr); | 131 | wattrset(win, darrow_attr); |
| @@ -139,6 +140,7 @@ static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, | |||
| 139 | } | 140 | } |
| 140 | 141 | ||
| 141 | wmove(win, cur_y, cur_x); | 142 | wmove(win, cur_y, cur_x); |
| 143 | wrefresh(win); | ||
| 142 | } | 144 | } |
| 143 | 145 | ||
| 144 | /* | 146 | /* |
| @@ -157,6 +159,17 @@ static void print_buttons(WINDOW * win, int height, int width, int selected) | |||
| 157 | wrefresh(win); | 159 | wrefresh(win); |
| 158 | } | 160 | } |
| 159 | 161 | ||
| 162 | /* scroll up n lines (n may be negative) */ | ||
| 163 | static void do_scroll(WINDOW *win, int *scroll, int n) | ||
| 164 | { | ||
| 165 | /* Scroll menu up */ | ||
| 166 | scrollok(win, TRUE); | ||
| 167 | wscrl(win, n); | ||
| 168 | scrollok(win, FALSE); | ||
| 169 | *scroll = *scroll + n; | ||
| 170 | wrefresh(win); | ||
| 171 | } | ||
| 172 | |||
| 160 | /* | 173 | /* |
| 161 | * Display a menu for choosing among a number of options | 174 | * Display a menu for choosing among a number of options |
| 162 | */ | 175 | */ |
| @@ -286,11 +299,7 @@ int dialog_menu(const char *title, const char *prompt, int height, int width, | |||
| 286 | if (key == KEY_UP || key == '-') { | 299 | if (key == KEY_UP || key == '-') { |
| 287 | if (choice < 2 && scroll) { | 300 | if (choice < 2 && scroll) { |
| 288 | /* Scroll menu down */ | 301 | /* Scroll menu down */ |
| 289 | scrollok(menu, TRUE); | 302 | do_scroll(menu, &scroll, -1); |
| 290 | wscrl(menu, -1); | ||
| 291 | scrollok(menu, FALSE); | ||
| 292 | |||
| 293 | scroll--; | ||
| 294 | 303 | ||
| 295 | print_item(menu, items[scroll * 2 + 1], 0, FALSE, | 304 | print_item(menu, items[scroll * 2 + 1], 0, FALSE, |
| 296 | (items[scroll * 2][0] != ':')); | 305 | (items[scroll * 2][0] != ':')); |
| @@ -306,11 +315,7 @@ int dialog_menu(const char *title, const char *prompt, int height, int width, | |||
| 306 | if ((choice > max_choice - 3) && | 315 | if ((choice > max_choice - 3) && |
| 307 | (scroll + max_choice < item_no)) { | 316 | (scroll + max_choice < item_no)) { |
| 308 | /* Scroll menu up */ | 317 | /* Scroll menu up */ |
| 309 | scrollok(menu, TRUE); | 318 | do_scroll(menu, &scroll, 1); |
| 310 | wscrl(menu, 1); | ||
| 311 | scrollok(menu, FALSE); | ||
| 312 | |||
| 313 | scroll++; | ||
| 314 | 319 | ||
| 315 | print_item(menu, items[(scroll + max_choice - 1) * 2 + 1], | 320 | print_item(menu, items[(scroll + max_choice - 1) * 2 + 1], |
| 316 | max_choice - 1, FALSE, | 321 | max_choice - 1, FALSE, |
| @@ -322,8 +327,7 @@ int dialog_menu(const char *title, const char *prompt, int height, int width, | |||
| 322 | scrollok(menu, TRUE); | 327 | scrollok(menu, TRUE); |
| 323 | for (i = 0; (i < max_choice); i++) { | 328 | for (i = 0; (i < max_choice); i++) { |
| 324 | if (scroll > 0) { | 329 | if (scroll > 0) { |
| 325 | wscrl(menu, -1); | 330 | do_scroll(menu, &scroll, -1); |
| 326 | scroll--; | ||
| 327 | print_item(menu, items[scroll * 2 + 1], 0, FALSE, | 331 | print_item(menu, items[scroll * 2 + 1], 0, FALSE, |
| 328 | (items[scroll * 2][0] != ':')); | 332 | (items[scroll * 2][0] != ':')); |
| 329 | } else { | 333 | } else { |
| @@ -331,15 +335,11 @@ int dialog_menu(const char *title, const char *prompt, int height, int width, | |||
| 331 | choice--; | 335 | choice--; |
| 332 | } | 336 | } |
| 333 | } | 337 | } |
| 334 | scrollok(menu, FALSE); | ||
| 335 | 338 | ||
| 336 | } else if (key == KEY_NPAGE) { | 339 | } else if (key == KEY_NPAGE) { |
| 337 | for (i = 0; (i < max_choice); i++) { | 340 | for (i = 0; (i < max_choice); i++) { |
| 338 | if (scroll + max_choice < item_no) { | 341 | if (scroll + max_choice < item_no) { |
| 339 | scrollok(menu, TRUE); | 342 | do_scroll(menu, &scroll, 1); |
| 340 | wscrl(menu, 1); | ||
| 341 | scrollok(menu, FALSE); | ||
| 342 | scroll++; | ||
| 343 | print_item(menu, items[(scroll + max_choice - 1) * 2 + 1], | 343 | print_item(menu, items[(scroll + max_choice - 1) * 2 + 1], |
| 344 | max_choice - 1, FALSE, | 344 | max_choice - 1, FALSE, |
| 345 | (items [(scroll + max_choice - 1) * 2][0] != ':')); | 345 | (items [(scroll + max_choice - 1) * 2][0] != ':')); |
| @@ -348,7 +348,6 @@ int dialog_menu(const char *title, const char *prompt, int height, int width, | |||
| 348 | choice++; | 348 | choice++; |
| 349 | } | 349 | } |
| 350 | } | 350 | } |
| 351 | |||
| 352 | } else | 351 | } else |
| 353 | choice = i; | 352 | choice = i; |
| 354 | 353 | ||
