Xinqi Bao's Git
projects
/
slock.git
/ commitdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (from parent 1:
55e827a
)
error messages on grab failure
author
Markus Teich <
[email protected]
>
Mon, 18 Jan 2016 15:49:15 +0000
(16:49 +0100)
committer
Markus Teich <
[email protected]
>
Mon, 18 Jan 2016 15:49:15 +0000
(16:49 +0100)
slock.c
patch
|
blob
|
history
diff --git
a/slock.c
b/slock.c
index
d2c3729
..
df2d3c6
100644
(file)
--- a/
slock.c
+++ b/
slock.c
@@
-230,7
+230,7
@@
lockscreen(Display *dpy, int screen)
XSetWindowAttributes wa;
Cursor invisible;
XSetWindowAttributes wa;
Cursor invisible;
- if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock))))
+ if (
!running ||
dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock))))
return NULL;
lock->screen = screen;
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);
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 | ButtonReleaseMask | PointerMotionMask,
GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess)
break;
usleep(1000);
}
for (len = 1000; len; len--) {
if (XGrabPointer(dpy, lock->root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess)
break;
usleep(1000);
}
- if (running && len) {
+ if (!len) {
+ fprintf(stderr, "slock: unable to grab mouse pointer for screen %d\n", screen);
+ } else {
for (len = 1000; len; len--) {
for (len = 1000; len; len--) {
- if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess)
- break;
+ if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess) {
+ /* everything fine, we grabbed both inputs */
+ XSelectInput(dpy, lock->root, SubstructureNotifyMask);
+ return lock;
+ }
usleep(1000);
}
usleep(1000);
}
+ fprintf(stderr, "slock: unable to grab keyboard for screen %d\n", screen);
}
}
-
- 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
}
static void