aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--slock.c44
1 files changed, 20 insertions, 24 deletions
diff --git a/slock.c b/slock.c
index 210d5c8..dd32374 100644
--- a/slock.c
+++ b/slock.c
@@ -222,7 +222,6 @@ static Lock *
222lockscreen(Display *dpy, int screen) 222lockscreen(Display *dpy, int screen)
223{ 223{
224 char curs[] = {0, 0, 0, 0, 0, 0, 0, 0}; 224 char curs[] = {0, 0, 0, 0, 0, 0, 0, 0};
225 unsigned int len;
226 int i; 225 int i;
227 Lock *lock; 226 Lock *lock;
228 XColor color, dummy; 227 XColor color, dummy;
@@ -249,34 +248,31 @@ lockscreen(Display *dpy, int screen)
249 lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); 248 lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
250 invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &color, 0, 0); 249 invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &color, 0, 0);
251 XDefineCursor(dpy, lock->win, invisible); 250 XDefineCursor(dpy, lock->win, invisible);
252 XMapRaised(dpy, lock->win);
253 if (rr)
254 XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
255 251
256 /* Try to grab mouse pointer *and* keyboard, else fail the lock */ 252 /* Try to grab mouse pointer *and* keyboard, else fail the lock */
257 for (len = 1000; len; len--) { 253 if (XGrabPointer(dpy, lock->root, False, ButtonPressMask |
258 if (XGrabPointer(dpy, lock->root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask, 254 ButtonReleaseMask | PointerMotionMask, GrabModeAsync, GrabModeAsync,
259 GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess) 255 None, invisible, CurrentTime) != GrabSuccess) {
260 break;
261 usleep(1000);
262 }
263 if (!len) {
264 fprintf(stderr, "slock: unable to grab mouse pointer for screen %d\n", screen); 256 fprintf(stderr, "slock: unable to grab mouse pointer for screen %d\n", screen);
265 } else { 257 running = 0;
266 for (len = 1000; len; len--) { 258 unlockscreen(dpy, lock);
267 if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync, GrabModeAsync, CurrentTime) == GrabSuccess) { 259 return NULL;
268 /* everything fine, we grabbed both inputs */ 260 }
269 XSelectInput(dpy, lock->root, SubstructureNotifyMask); 261
270 return lock; 262 if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync, GrabModeAsync,
271 } 263 CurrentTime) != GrabSuccess) {
272 usleep(1000);
273 }
274 fprintf(stderr, "slock: unable to grab keyboard for screen %d\n", screen); 264 fprintf(stderr, "slock: unable to grab keyboard for screen %d\n", screen);
265 running = 0;
266 unlockscreen(dpy, lock);
267 return NULL;
275 } 268 }
276 /* grabbing one of the inputs failed */ 269
277 running = 0; 270 XMapRaised(dpy, lock->win);
278 unlockscreen(dpy, lock); 271 if (rr)
279 return NULL; 272 XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
273
274 XSelectInput(dpy, lock->root, SubstructureNotifyMask);
275 return lock;
280} 276}
281 277
282static void 278static void