| slock-auto-timeout-20221002-35633d4.diff - sites - public wiki contents of suck… | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| slock-auto-timeout-20221002-35633d4.diff (1932B) | |
| --- | |
| 1 diff --git a/config.def.h b/config.def.h | |
| 2 index 9855e21..354980b 100644 | |
| 3 --- a/config.def.h | |
| 4 +++ b/config.def.h | |
| 5 @@ -10,3 +10,12 @@ static const char *colorname[NUMCOLS] = { | |
| 6 | |
| 7 /* treat a cleared input like a wrong password (color) */ | |
| 8 static const int failonclear = 1; | |
| 9 + | |
| 10 +/* length of time (seconds) until [command] is executed */ | |
| 11 +static const int timeoffset = 60; | |
| 12 + | |
| 13 +/* should [command] be run only once? */ | |
| 14 +static const int runonce = 0; | |
| 15 + | |
| 16 +/* command to be run after [timeoffset] seconds has passed */ | |
| 17 +static const char *command = "doas poweroff"; | |
| 18 diff --git a/slock.c b/slock.c | |
| 19 index 5ae738c..7644bd9 100644 | |
| 20 --- a/slock.c | |
| 21 +++ b/slock.c | |
| 22 @@ -19,11 +19,16 @@ | |
| 23 #include <X11/Xlib.h> | |
| 24 #include <X11/Xutil.h> | |
| 25 | |
| 26 +#include <time.h> | |
| 27 + | |
| 28 #include "arg.h" | |
| 29 #include "util.h" | |
| 30 | |
| 31 char *argv0; | |
| 32 | |
| 33 +time_t lasttouched; | |
| 34 +int runflag = 0; | |
| 35 + | |
| 36 enum { | |
| 37 INIT, | |
| 38 INPUT, | |
| 39 @@ -140,7 +145,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock … | |
| 40 failure = 0; | |
| 41 oldc = INIT; | |
| 42 | |
| 43 - while (running && !XNextEvent(dpy, &ev)) { | |
| 44 + while (running) { | |
| 45 + while (XPending(dpy)) { | |
| 46 + XNextEvent(dpy, &ev); | |
| 47 if (ev.type == KeyPress) { | |
| 48 explicit_bzero(&buf, sizeof(buf)); | |
| 49 num = XLookupString(&ev.xkey, buf, sizeof(buf),… | |
| 50 @@ -217,6 +224,17 @@ readpw(Display *dpy, struct xrandr *rr, struct lock… | |
| 51 XRaiseWindow(dpy, locks[screen]->wi… | |
| 52 } | |
| 53 } | |
| 54 + | |
| 55 + time_t currenttime; | |
| 56 + time(¤ttime); | |
| 57 + | |
| 58 + if (currenttime >= lasttouched + timeoffset){ | |
| 59 + if (!runonce || !runflag){ | |
| 60 + runflag = 1; | |
| 61 + system(command); | |
| 62 + } | |
| 63 + } | |
| 64 + } | |
| 65 } | |
| 66 | |
| 67 static struct lock * | |
| 68 @@ -229,6 +247,8 @@ lockscreen(Display *dpy, struct xrandr *rr, int scre… | |
| 69 XSetWindowAttributes wa; | |
| 70 Cursor invisible; | |
| 71 | |
| 72 + time(&lasttouched); | |
| 73 + | |
| 74 if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct … | |
| 75 return NULL; | |
| 76 |