[hackers] [slock] error messages on grab failure || Markus Teich

From: <git_AT_suckless.org>
Date: Mon, 18 Jan 2016 16:53:04 +0100 (CET)

commit 9dfe0ce531023bf63c0e518b07ee97cf0cac742a
Author: Markus Teich <markus.teich_AT_stusta.mhn.de>
AuthorDate: Mon Jan 18 16:49:15 2016 +0100
Commit: Markus Teich <markus.teich_AT_stusta.mhn.de>
CommitDate: Mon Jan 18 16:49:15 2016 +0100

    error messages on grab failure

diff --git a/slock.c b/slock.c
index d2c3729..df2d3c6 100644
--- a/slock.c
+++ b/slock.c
_AT_@ -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(Lock))))
                 return NULL;
 
         lock->screen = screen;
_AT_@ -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 | 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--) {
- 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);
                 }
+ 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
Received on Mon Jan 18 2016 - 16:53:04 CET

This archive was generated by hypermail 2.3.0 : Mon Jan 18 2016 - 17:00:25 CET