diff --git a/dwm b/dwm index 54289f2..b1ba0a8 100755 Binary files a/dwm and b/dwm differ diff --git a/dwm.c b/dwm.c index dc11f95..86e5d9b 100644 --- a/dwm.c +++ b/dwm.c @@ -1573,26 +1573,27 @@ quit(const Arg *arg) void quitprompt(const Arg *arg) { - FILE *pp = popen("echo \"no\nrestart\nyes\" | dmenu -i -sb red -p \"Quit DWM?\"", "r"); - if(pp != NULL) { - char buf[1024]; - if (fgets(buf, sizeof(buf), pp) == NULL) { - fprintf(stderr, "Quitprompt: Error reading pipe!\n"); - return; - } - if (strcmp(buf, "yes\n") == 0) { - pclose(pp); - restart = 0; - quit(NULL); - } else if (strcmp(buf, "restart\n") == 0) { - pclose(pp); - restart = 1; - quit(NULL); - } else if (strcmp(buf, "no\n") == 0) { - pclose(pp); - return; - } + FILE *pp = popen("echo \"lock\nrestart\nexit\nreboot\nshutdown\" | dmenu -i -sb red -p \"exit:\"", "r"); + + char buf[16]; + + if(pp == NULL || fscanf(pp, "%15[a-zA-Z -]", buf) == EOF) { + fputs("Quitprompt: Error reading pipe!", stderr); + goto close_streams; } + + int sysret; + + if(strcmp(buf, "lock") == 0) sysret = system("slock"); + else if(strcmp(buf, "restart") == 0) quit(&(const Arg){1}); + else if(strcmp(buf, "exit") == 0) quit(&(const Arg){0}); + else if(strcmp(buf, "reboot") == 0) sysret = system("systemctl reboot"); + else if(strcmp(buf, "shutdown") == 0) sysret = system("systemctl poweroff -i"); + + if(sysret); + +close_streams: + pclose(pp); } Monitor * diff --git a/dwm.o b/dwm.o index d3ad0fb..4898290 100644 Binary files a/dwm.o and b/dwm.o differ