diff options
| -rw-r--r-- | slock.c | 44 | 
1 files changed, 20 insertions, 24 deletions
@@ -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; @@ -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  | 
