@ -222,7 +222,6 @@ static Lock *
lockscreen ( Display * dpy , int screen )
lockscreen ( Display * dpy , int screen )
{
{
char curs [ ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
char curs [ ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
unsigned int len ;
int i ;
int i ;
Lock * lock ;
Lock * lock ;
XColor color , dummy ;
XColor color , dummy ;
@ -249,34 +248,31 @@ lockscreen(Display *dpy, int screen)
lock - > pmap = XCreateBitmapFromData ( dpy , lock - > win , curs , 8 , 8 ) ;
lock - > pmap = XCreateBitmapFromData ( dpy , lock - > win , curs , 8 , 8 ) ;
invisible = XCreatePixmapCursor ( dpy , lock - > pmap , lock - > pmap , & color , & color , 0 , 0 ) ;
invisible = XCreatePixmapCursor ( dpy , lock - > pmap , lock - > pmap , & color , & color , 0 , 0 ) ;
XDefineCursor ( dpy , lock - > win , invisible ) ;
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 */
/* Try to grab mouse pointer *and* keyboard, else fail the lock */
for ( len = 1000 ; len ; len - - ) {
if ( XGrabPointer ( dpy , lock - > root , False , ButtonPressMask |
if ( XGrabPointer ( dpy , lock - > root , False , ButtonPressMask | ButtonReleaseMask | PointerMotionMask ,
ButtonReleaseMask | PointerMotionMask , GrabModeAsync , GrabModeAsync ,
GrabModeAsync , GrabModeAsync , None , invisible , CurrentTime ) = = GrabSuccess )
None , invisible , CurrentTime ) ! = GrabSuccess ) {
break ;
usleep ( 1000 ) ;
}
if ( ! len ) {
fprintf ( stderr , " slock: unable to grab mouse pointer for screen %d \n " , screen ) ;
fprintf ( stderr , " slock: unable to grab mouse pointer for screen %d \n " , screen ) ;
} else {
running = 0 ;
for ( len = 1000 ; len ; len - - ) {
unlockscreen ( dpy , lock ) ;
if ( XGrabKeyboard ( dpy , lock - > root , True , GrabModeAsync , GrabModeAsync , CurrentTime ) = = GrabSuccess ) {
return NULL ;
/* everything fine, we grabbed both inputs */
}
XSelectInput ( dpy , lock - > root , SubstructureNotifyMask ) ;
return lock ;
if ( XGrabKeyboard ( dpy , lock - > root , True , GrabModeAsync , GrabModeAsync ,
}
CurrentTime ) ! = GrabSuccess ) {
usleep ( 1000 ) ;
}
fprintf ( stderr , " slock: unable to grab keyboard for screen %d \n " , screen ) ;
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 ;
XMapRaised ( dpy , lock - > win ) ;
unlockscreen ( dpy , lock ) ;
if ( rr )
return NULL ;
XRRSelectInput ( dpy , lock - > win , RRScreenChangeNotifyMask ) ;
XSelectInput ( dpy , lock - > root , SubstructureNotifyMask ) ;
return lock ;
}
}
static void
static void