|
|
@ -234,6 +234,11 @@ unlockscreen(Display *dpy, Lock *lock) |
|
|
|
static void |
|
|
|
static void |
|
|
|
cleanup(Display *dpy) |
|
|
|
cleanup(Display *dpy) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
int s; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (s = 0; s < nscreens; ++s) |
|
|
|
|
|
|
|
unlockscreen(dpy, locks[s]); |
|
|
|
|
|
|
|
|
|
|
|
free(locks); |
|
|
|
free(locks); |
|
|
|
XCloseDisplay(dpy); |
|
|
|
XCloseDisplay(dpy); |
|
|
|
} |
|
|
|
} |
|
|
@ -305,8 +310,6 @@ lockscreen(Display *dpy, int screen) |
|
|
|
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); |
|
|
|
if (kbgrab != GrabSuccess) |
|
|
|
if (kbgrab != GrabSuccess) |
|
|
|
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; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -359,19 +362,21 @@ main(int argc, char **argv) { |
|
|
|
|
|
|
|
|
|
|
|
/* get number of screens in display "dpy" and blank them */ |
|
|
|
/* get number of screens in display "dpy" and blank them */ |
|
|
|
nscreens = ScreenCount(dpy); |
|
|
|
nscreens = ScreenCount(dpy); |
|
|
|
if (!(locks = malloc(sizeof(Lock *) * nscreens))) { |
|
|
|
if (!(locks = calloc(nscreens, sizeof(Lock *)))) { |
|
|
|
XCloseDisplay(dpy); |
|
|
|
XCloseDisplay(dpy); |
|
|
|
die("slock: out of memory\n"); |
|
|
|
die("slock: out of memory\n"); |
|
|
|
} |
|
|
|
} |
|
|
|
for (nlocks = 0, s = 0; s < nscreens; s++) { |
|
|
|
for (nlocks = 0, s = 0; s < nscreens; s++) { |
|
|
|
if ((locks[s] = lockscreen(dpy, s)) != NULL) |
|
|
|
if ((locks[s] = lockscreen(dpy, s)) != NULL) |
|
|
|
nlocks++; |
|
|
|
nlocks++; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
XSync(dpy, 0); |
|
|
|
XSync(dpy, 0); |
|
|
|
|
|
|
|
|
|
|
|
/* did we actually manage to lock anything? */ |
|
|
|
/* did we manage to lock everything? */ |
|
|
|
if (nlocks == 0) { |
|
|
|
if (nlocks != nscreens) { |
|
|
|
/* nothing to protect */ |
|
|
|
running = 0; |
|
|
|
cleanup(dpy); |
|
|
|
cleanup(dpy); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
@ -400,9 +405,6 @@ main(int argc, char **argv) { |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
/* password ok, unlock everything and quit */ |
|
|
|
/* password ok, unlock everything and quit */ |
|
|
|
for (s = 0; s < nscreens; s++) |
|
|
|
|
|
|
|
unlockscreen(dpy, locks[s]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cleanup(dpy); |
|
|
|
cleanup(dpy); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|