error messages on grab failure
This commit is contained in:
parent
55e827af0f
commit
9dfe0ce531
28
slock.c
28
slock.c
|
@ -230,7 +230,7 @@ lockscreen(Display *dpy, int screen)
|
||||||
XSetWindowAttributes wa;
|
XSetWindowAttributes wa;
|
||||||
Cursor invisible;
|
Cursor invisible;
|
||||||
|
|
||||||
if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock))))
|
if (!running || dpy == NULL || screen < 0 || !(lock = malloc(sizeof(Lock))))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
lock->screen = screen;
|
lock->screen = screen;
|
||||||
|
@ -253,29 +253,31 @@ lockscreen(Display *dpy, int screen)
|
||||||
XMapRaised(dpy, lock->win);
|
XMapRaised(dpy, lock->win);
|
||||||
if (rr)
|
if (rr)
|
||||||
XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
|
XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
|
||||||
|
|
||||||
|
/* Try to grab mouse pointer *and* keyboard, else fail the lock */
|
||||||
for (len = 1000; len; len--) {
|
for (len = 1000; len; len--) {
|
||||||
if (XGrabPointer(dpy, lock->root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
|
if (XGrabPointer(dpy, lock->root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask,
|
||||||
GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess)
|
GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess)
|
||||||
break;
|
break;
|
||||||
usleep(1000);
|
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)
|
if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess) {
|
||||||
break;
|
/* 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);
|
||||||
}
|
}
|
||||||
|
/* grabbing one of the inputs failed */
|
||||||
running &= (len > 0);
|
running = 0;
|
||||||
if (!running) {
|
|
||||||
unlockscreen(dpy, lock);
|
unlockscreen(dpy, lock);
|
||||||
lock = NULL;
|
return NULL;
|
||||||
} else {
|
|
||||||
XSelectInput(dpy, lock->root, SubstructureNotifyMask);
|
|
||||||
}
|
|
||||||
|
|
||||||
return lock;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue