[hackers] [slock] Exit as soon as possible on input grabbing error || Quentin Rameau

From: <git_AT_suckless.org>
Date: Wed, 31 Aug 2016 00:38:21 +0200 (CEST)

commit c2f975773d720e734dbdab9a1e9ae51b0972ae0c
Author: Quentin Rameau <quinq_AT_fifth.space>
AuthorDate: Tue Aug 30 17:33:09 2016 +0200
Commit: Markus Teich <markus.teich_AT_stusta.mhn.de>
CommitDate: Tue Aug 30 19:54:26 2016 +0200

    Exit as soon as possible on input grabbing error
    
    We want to know at once if slock failed or not to lock the screen, not
    seing a black screen for a whole second (or two) and then die.
    Thanks to ^7heo for reporting this.

diff --git a/slock.c b/slock.c
index 210d5c8..dd32374 100644
--- a/slock.c
+++ b/slock.c
_AT_@ -222,7 +222,6 @@ static Lock *
 lockscreen(Display *dpy, int screen)
 {
         char curs[] = {0, 0, 0, 0, 0, 0, 0, 0};
- unsigned int len;
         int i;
         Lock *lock;
         XColor color, dummy;
_AT_@ -249,34 +248,31 @@ lockscreen(Display *dpy, int screen)
         lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
         invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &color, 0, 0);
         XDefineCursor(dpy, lock->win, invisible);
- 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 (!len) {
+ if (XGrabPointer(dpy, lock->root, False, ButtonPressMask |
+ ButtonReleaseMask | PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, invisible, CurrentTime) != GrabSuccess) {
                 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) {
- /* everything fine, we grabbed both inputs */
- XSelectInput(dpy, lock->root, SubstructureNotifyMask);
- return lock;
- }
- usleep(1000);
- }
+ running = 0;
+ unlockscreen(dpy, lock);
+ return NULL;
+ }
+
+ if (XGrabKeyboard(dpy, lock->root, True, GrabModeAsync, GrabModeAsync,
+ CurrentTime) != GrabSuccess) {
                 fprintf(stderr, "slock: unable to grab keyboard for screen %d\n", screen);
+ running = 0;
+ unlockscreen(dpy, lock);
+ return NULL;
         }
- /* grabbing one of the inputs failed */
- running = 0;
- unlockscreen(dpy, lock);
- return NULL;
+
+ XMapRaised(dpy, lock->win);
+ if (rr)
+ XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);
+
+ XSelectInput(dpy, lock->root, SubstructureNotifyMask);
+ return lock;
 }
 
 static void
Received on Wed Aug 31 2016 - 00:38:21 CEST

This archive was generated by hypermail 2.3.0 : Wed Aug 31 2016 - 00:48:17 CEST