diff options
author | Anselm R. Garbe <arg@10kloc.org> | 2006-10-11 13:33:04 +0200 |
---|---|---|
committer | Anselm R. Garbe <arg@10kloc.org> | 2006-10-11 13:33:04 +0200 |
commit | 50bc1a788e8900cb40e8a64a22ddf99393dbe788 (patch) | |
tree | b5ae8846098f7847b75839b96e777775aa1a2cf7 | |
parent | 763e52878dba100e79c6f4a837a92e1df0d41ae0 (diff) |
added black window
-rw-r--r-- | slock.c | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -15,13 +15,15 @@ int main(int argc, char **argv) { char buf[32], passwd[256]; - int num, prev_nitem; + int num, prev_nitem, screen; struct spwd *sp; unsigned int i, len; Bool running = True; KeySym ksym; Display *dpy; + Window w; XEvent ev; + XSetWindowAttributes wa; if((argc > 1) && !strncmp(argv[1], "-v", 3)) { 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); exit(EXIT_FAILURE); } + screen = DefaultScreen(dpy); /* init */ passwd[0] = 0; - while(XGrabKeyboard(dpy, DefaultRootWindow(dpy), True, GrabModeAsync, + while(XGrabKeyboard(dpy, RootWindow(dpy, screen), True, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess) 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 */ while(running && !XNextEvent(dpy, &ev)) if(ev.type == KeyPress) { @@ -66,7 +78,8 @@ main(int argc, char **argv) { } switch(ksym) { 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; break; case XK_Escape: @@ -87,6 +100,7 @@ main(int argc, char **argv) { break; } } + XDestroyWindow(dpy, w); XCloseDisplay(dpy); return 0; } |