aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Henriksen <LarsHenriksen@get2net.dk>2017-10-27 08:17:57 +0200
committerLukas Fleischer <lfleischer@calcurse.org>2017-10-29 08:42:03 +0100
commit012a0e6670533911d70f47533e064969c7fc3b65 (patch)
tree4e9714e1f78039bad0a63a34abd829ef1c5196c9
parente9bddf38e829184c3e569c4c666901e7b29f2e43 (diff)
downloadcalcurse-012a0e6670533911d70f47533e064969c7fc3b65.tar.gz
calcurse-012a0e6670533911d70f47533e064969c7fc3b65.zip
Fix multiple popup windows
The window was not deleted if an "already in use"-key was detected, and a new one was created as the loop was reentered. Create/delete of the popup are moved outside the loop. A redrawwin() call is needed to have the window displayed again. Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
-rw-r--r--src/calcurse.h1
-rw-r--r--src/custom.c18
-rw-r--r--src/wins.c11
3 files changed, 19 insertions, 11 deletions
diff --git a/src/calcurse.h b/src/calcurse.h
index 2124bb2..85e36b2 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1216,6 +1216,7 @@ void wins_calendar_cleanup(void *);
int wins_refresh(void);
int wins_wrefresh(WINDOW *);
int wins_doupdate(void);
+int wins_redrawwin(WINDOW *);
int wins_layout(void);
void wins_set_layout(int);
unsigned wins_sbar_width(void);
diff --git a/src/custom.c b/src/custom.c
index 3da9da4..52bdd5b 100644
--- a/src/custom.c
+++ b/src/custom.c
@@ -988,21 +988,16 @@ void custom_keys_config(void)
case KEY_ADD_ITEM:
#define WINROW 10
#define WINCOL 50
+ grabwin = popup(WINROW, WINCOL,
+ (row - WINROW) / 2, (col - WINCOL) / 2,
+ _("Press the key you want to assign to:"),
+ keys_get_label(selrow), 0);
for (;;) {
- grabwin =
- popup(WINROW, WINCOL,
- (row - WINROW) / 2,
- (col - WINCOL) / 2,
- _("Press the key you want to assign to:"),
- keys_get_label(selrow), 0);
-
ch = keys_wgetch(grabwin);
enum key action = keys_get_action(ch);
/* Is the key already used by this action? */
- if (action == selrow) {
- delwin(grabwin);
+ if (action == selrow)
break;
- }
/* Is the key used by another action? */
if (keys_assign_binding(ch, selrow)) {
char *keystr = keys_int2str(ch);
@@ -1018,13 +1013,14 @@ void custom_keys_config(void)
selelm,
LINESPERKEY);
wins_scrollwin_display(&kwin);
+ wins_redrawwin(grabwin);
continue;
}
nbrowelm++;
selelm = nbrowelm - 1;
- delwin(grabwin);
break;
}
+ delwin(grabwin);
#undef WINROW
#undef WINCOL
break;
diff --git a/src/wins.c b/src/wins.c
index d86b168..5a28dc7 100644
--- a/src/wins.c
+++ b/src/wins.c
@@ -163,6 +163,17 @@ int wins_doupdate(void)
return rc;
}
+int wins_redrawwin(WINDOW *win)
+{
+ int rc;
+
+ SCREEN_ACQUIRE;
+ rc = redrawwin(win);
+ SCREEN_RELEASE;
+
+ return rc;
+}
+
/* Get the current layout. */
int wins_layout(void)
{