added black window

This commit is contained in:
Anselm R. Garbe 2006-10-11 13:33:04 +02:00
parent 763e52878d
commit 50bc1a788e
1 changed files with 17 additions and 3 deletions

20
slock.c
View File

@ -15,13 +15,15 @@
int int
main(int argc, char **argv) { main(int argc, char **argv) {
char buf[32], passwd[256]; char buf[32], passwd[256];
int num, prev_nitem; int num, prev_nitem, screen;
struct spwd *sp; struct spwd *sp;
unsigned int i, len; unsigned int i, len;
Bool running = True; Bool running = True;
KeySym ksym; KeySym ksym;
Display *dpy; Display *dpy;
Window w;
XEvent ev; XEvent ev;
XSetWindowAttributes wa;
if((argc > 1) && !strncmp(argv[1], "-v", 3)) { if((argc > 1) && !strncmp(argv[1], "-v", 3)) {
fputs("slock-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout); fputs("slock-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
@ -36,13 +38,23 @@ main(int argc, char **argv) {
fputs("slock: cannot open display\n", stderr); fputs("slock: cannot open display\n", stderr);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
screen = DefaultScreen(dpy);
/* init */ /* init */
passwd[0] = 0; passwd[0] = 0;
while(XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync, while(XGrabKeyboard(dpy, RootWindow(dpy, screen), True, GrabModeAsync,
GrabModeAsync, CurrentTime) != GrabSuccess) GrabModeAsync, CurrentTime) != GrabSuccess)
usleep(1000); usleep(1000);
wa.override_redirect = 1;
wa.background_pixel = BlackPixel(dpy, screen);
w = XCreateWindow(dpy, RootWindow(dpy, screen), 0, 0,
DisplayWidth(dpy, screen), DisplayHeight(dpy, screen),
0, DefaultDepth(dpy, screen), CopyFromParent,
DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixel, &wa);
XMapRaised(dpy, w);
XSync(dpy, False);
/* main event loop */ /* main event loop */
while(running && !XNextEvent(dpy, &ev)) while(running && !XNextEvent(dpy, &ev))
if(ev.type == KeyPress) { if(ev.type == KeyPress) {
@ -66,7 +78,8 @@ main(int argc, char **argv) {
} }
switch(ksym) { switch(ksym) {
case XK_Return: case XK_Return:
running = strncmp(crypt(passwd, sp->sp_pwdp), sp->sp_pwdp, sizeof(passwd)); if((running = strncmp(crypt(passwd, sp->sp_pwdp), sp->sp_pwdp, sizeof(passwd))))
XBell(dpy, 100);
passwd[0] = 0; passwd[0] = 0;
break; break;
case XK_Escape: case XK_Escape:
@ -87,6 +100,7 @@ main(int argc, char **argv) {
break; break;
} }
} }
XDestroyWindow(dpy, w);
XCloseDisplay(dpy); XCloseDisplay(dpy);
return 0; return 0;
} }