summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gnu/lib/libdialog/checklist.c16
-rw-r--r--gnu/lib/libdialog/radiolist.c1
2 files changed, 13 insertions, 4 deletions
diff --git a/gnu/lib/libdialog/checklist.c b/gnu/lib/libdialog/checklist.c
index 1090293..5d7c03b 100644
--- a/gnu/lib/libdialog/checklist.c
+++ b/gnu/lib/libdialog/checklist.c
@@ -238,6 +238,7 @@ draw:
if (st & DITEM_RESTORE) {
touchwin(save);
wrefresh(save);
+ wmove(dialog, cur_y, cur_x);
}
delwin(save);
}
@@ -316,6 +317,7 @@ draw:
save = dupwin(newscr);
st = ditems[scroll + choice].fire(&ditems[scroll + choice]);
if (st & DITEM_REDRAW) {
+ wmove(dialog, cur_y, cur_x); /* Restore cursor to previous position */
for (i = 0; i < item_no; i++)
status[i] = ditems[i].checked ? ditems[i].checked(&ditems[i]) : FALSE;
for (i = 0; i < max_choice; i++) {
@@ -457,11 +459,17 @@ draw:
case '\r':
if (!button && result) {
if (ditems && ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire) {
- if (ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire(&ditems[button ? CANCEL_BUTTON : OK_BUTTON]) ==
- DITEM_FAILURE) {
- wrefresh(dialog);
- continue;
+ int st;
+ WINDOW *save = dupwin(newscr);
+
+ st = ditems[button ? CANCEL_BUTTON : OK_BUTTON].fire(&ditems[button ? CANCEL_BUTTON : OK_BUTTON]);
+ if (st & DITEM_RESTORE) {
+ touchwin(save);
+ wrefresh(save);
}
+ delwin(save);
+ if (st == DITEM_FAILURE)
+ continue;
}
else {
*result = '\0';
diff --git a/gnu/lib/libdialog/radiolist.c b/gnu/lib/libdialog/radiolist.c
index 970953b..cb1d1a7 100644
--- a/gnu/lib/libdialog/radiolist.c
+++ b/gnu/lib/libdialog/radiolist.c
@@ -337,6 +337,7 @@ draw:
else if (st & DITEM_RESTORE) {
touchwin(save);
wrefresh(save);
+ wmove(dialog, cur_y, cur_x);
}
else if (st & DITEM_RECREATE) {
delwin(save);
OpenPOWER on IntegriCloud