error messages on grab failure - slock - simple X display locker utility | |
git clone git://git.suckless.org/slock | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9dfe0ce531023bf63c0e518b07ee97cf0cac742a | |
parent 55e827af0fb94f6c2b9e76a7bfe7e98cf697dc7b | |
Author: Markus Teich <[email protected]> | |
Date: Mon, 18 Jan 2016 16:49:15 +0100 | |
error messages on grab failure | |
Diffstat: | |
M slock.c | 30 ++++++++++++++++-------------- | |
1 file changed, 16 insertions(+), 14 deletions(-) | |
--- | |
diff --git a/slock.c b/slock.c | |
@@ -230,7 +230,7 @@ lockscreen(Display *dpy, int screen) | |
XSetWindowAttributes wa; | |
Cursor invisible; | |
- if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock)))) | |
+ if (!running || dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lo… | |
return NULL; | |
lock->screen = screen; | |
@@ -253,29 +253,31 @@ lockscreen(Display *dpy, int screen) | |
XMapRaised(dpy, lock->win); | |
if (rr) | |
XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask); | |
+ | |
+ /* Try to grab mouse pointer *and* keyboard, else fail the lock */ | |
for (len = 1000; len; len--) { | |
if (XGrabPointer(dpy, lock->root, False, ButtonPressMask | But… | |
GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime… | |
break; | |
usleep(1000); | |
} | |
- if (running && len) { | |
+ if (!len) { | |
+ fprintf(stderr, "slock: unable to grab mouse pointer for scree… | |
+ } else { | |
for (len = 1000; len; len--) { | |
- if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync… | |
- break; | |
+ if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync… | |
+ /* everything fine, we grabbed both inputs */ | |
+ XSelectInput(dpy, lock->root, SubstructureNoti… | |
+ return lock; | |
+ } | |
usleep(1000); | |
} | |
+ fprintf(stderr, "slock: unable to grab keyboard for screen %d\… | |
} | |
- | |
- running &= (len > 0); | |
- if (!running) { | |
- unlockscreen(dpy, lock); | |
- lock = NULL; | |
- } else { | |
- XSelectInput(dpy, lock->root, SubstructureNotifyMask); | |
- } | |
- | |
- return lock; | |
+ /* grabbing one of the inputs failed */ | |
+ running = 0; | |
+ unlockscreen(dpy, lock); | |
+ return NULL; | |
} | |
static void |