Commit: 8babd3393b8673effcae276e1185ed41637f1211
Parent: 410ef5960fde8a8d601264859032bb9032ead6f6
Author: Moritz Luedecke
Date: Tue, 1 Aug 2017 23:45:12 +0200
Add confirm dialog
Diffstat:
1 file changed, 21 insertions(+), 22 deletions(-)
diff --git a/pinentry-dmenu.c b/pinentry-dmenu.c
@@ -33,21 +33,15 @@
enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */
enum { WinPin, WinConfirm }; /* window modes */
enum { Ok, NotOk, Cancel }; /* return status */
-
-struct item {
- char *text;
- struct item *left, *right;
- int out;
-};
+enum { Nothing, Yes, No }; /* confirm dialog */
static char text[BUFSIZ] = "";
static char *embed;
static int bh, mw, mh;
-static int inputw = 0, promptw, ppromptw;
+static int sel;
+static int promptw, ppromptw;
static int lrpad; /* sum of left and right padding */
static size_t cursor;
-static struct item *items = NULL;
-static struct item *prev, *curr, *next, *sel;
static int mon = -1, screen;
static Atom clip, utf8;
@@ -113,7 +107,7 @@ insert(const char *str, ssize_t n) {
static void
drawwin(void) {
unsigned int curpos;
- int x = 0, y = 0, w, i;
+ int x = 0, y = 0, w = 0, i;
size_t asterlen = strlen(asterisk);
char* censort = ecalloc(1, asterlen * sizeof(text));
#if 0
@@ -138,7 +132,6 @@ drawwin(void) {
}
/* Draw input field */
- w = inputw;
drw_setscheme(drw, scheme[SchemeNorm]);
#if 0
@@ -176,8 +169,9 @@ drawwin(void) {
#endif
free(censort);
} else {
- // TODO: Do this with a list view? 3 entries: startentry/neutral, YES and NO
- drw_text(drw, x, y, mw, bh, lrpad / 2, "(y/n)", 0);
+ x += TEXTW(" ");
+ x = drawitem("No", (sel == No), x, 0, TEXTW("No"));
+ x = drawitem("Yes", (sel == Yes), x, 0, TEXTW("Yes"));
}
#if 0
@@ -268,7 +262,6 @@ setup(void) {
promptw = (prompt && *prompt) ? TEXTW(prompt) - lrpad / 4 : 0;
ppromptw = (pprompt && *pprompt) ? TEXTW(pprompt) : 0;
- inputw = MIN(inputw, mw / 3);
/* create menu window */
swa.override_redirect = True;
@@ -328,21 +321,27 @@ keypress(XKeyEvent *ev) {
switch(ksym) {
case XK_KP_Enter:
case XK_Return:
-
+ if (sel != Nothing) {
+ return 1;
+ }
+ break;
case XK_y:
case XK_Y:
- confirmed = 1;
+ sel = Yes;
return 1;
- break;
case XK_n:
case XK_N:
- confirmed = 0;
+ sel = No;
return 1;
- break;
case XK_Escape:
pinentry->canceled = 1;
- confirmed = 0;
+ sel = No;
return 1;
+ case XK_Left:
+ sel = No;
+ break;
+ case XK_Right:
+ sel = Yes;
break;
}
} else {
@@ -475,10 +474,10 @@ password (void) {
static int
confirm(void) {
winmode = WinConfirm;
- confirmed = 0;
+ sel = Nothing;
promptwin();
- return confirmed;
+ return sel != No;
}
static int