diff options
-rw-r--r-- | config.def.h | 7 | ||||
-rw-r--r-- | slock.c | 27 |
2 files changed, 23 insertions, 11 deletions
diff --git a/config.def.h b/config.def.h index 89e5977..4bccb5d 100644 --- a/config.def.h +++ b/config.def.h | |||
@@ -1,2 +1,5 @@ | |||
1 | #define COLOR1 "black" | 1 | static const char *colorname[NUMCOLS] = { |
2 | #define COLOR2 "#005577" | 2 | "black", /* after initialization */ |
3 | "#005577", /* during input */ | ||
4 | "#CC3333", /* failed/cleared the input */ | ||
5 | }; | ||
@@ -22,13 +22,20 @@ | |||
22 | #include <bsd_auth.h> | 22 | #include <bsd_auth.h> |
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | enum { | ||
26 | INIT, | ||
27 | INPUT, | ||
28 | EMPTY, | ||
29 | NUMCOLS | ||
30 | }; | ||
31 | |||
25 | #include "config.h" | 32 | #include "config.h" |
26 | 33 | ||
27 | typedef struct { | 34 | typedef struct { |
28 | int screen; | 35 | int screen; |
29 | Window root, win; | 36 | Window root, win; |
30 | Pixmap pmap; | 37 | Pixmap pmap; |
31 | unsigned long colors[2]; | 38 | unsigned long colors[NUMCOLS]; |
32 | } Lock; | 39 | } Lock; |
33 | 40 | ||
34 | static Lock **locks; | 41 | static Lock **locks; |
@@ -162,12 +169,12 @@ readpw(Display *dpy, const char *pws) | |||
162 | } | 169 | } |
163 | if (llen == 0 && len != 0) { | 170 | if (llen == 0 && len != 0) { |
164 | for (screen = 0; screen < nscreens; screen++) { | 171 | for (screen = 0; screen < nscreens; screen++) { |
165 | XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[1]); | 172 | XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[INPUT]); |
166 | XClearWindow(dpy, locks[screen]->win); | 173 | XClearWindow(dpy, locks[screen]->win); |
167 | } | 174 | } |
168 | } else if (llen != 0 && len == 0) { | 175 | } else if (llen != 0 && len == 0) { |
169 | for (screen = 0; screen < nscreens; screen++) { | 176 | for (screen = 0; screen < nscreens; screen++) { |
170 | XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[0]); | 177 | XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[EMPTY]); |
171 | XClearWindow(dpy, locks[screen]->win); | 178 | XClearWindow(dpy, locks[screen]->win); |
172 | } | 179 | } |
173 | } | 180 | } |
@@ -185,7 +192,7 @@ unlockscreen(Display *dpy, Lock *lock) | |||
185 | return; | 192 | return; |
186 | 193 | ||
187 | XUngrabPointer(dpy, CurrentTime); | 194 | XUngrabPointer(dpy, CurrentTime); |
188 | XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, 2, 0); | 195 | XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, NUMCOLS, 0); |
189 | XFreePixmap(dpy, lock->pmap); | 196 | XFreePixmap(dpy, lock->pmap); |
190 | XDestroyWindow(dpy, lock->win); | 197 | XDestroyWindow(dpy, lock->win); |
191 | 198 | ||
@@ -197,6 +204,7 @@ lockscreen(Display *dpy, int screen) | |||
197 | { | 204 | { |
198 | char curs[] = {0, 0, 0, 0, 0, 0, 0, 0}; | 205 | char curs[] = {0, 0, 0, 0, 0, 0, 0, 0}; |
199 | unsigned int len; | 206 | unsigned int len; |
207 | int i; | ||
200 | Lock *lock; | 208 | Lock *lock; |
201 | XColor color, dummy; | 209 | XColor color, dummy; |
202 | XSetWindowAttributes wa; | 210 | XSetWindowAttributes wa; |
@@ -213,16 +221,17 @@ lockscreen(Display *dpy, int screen) | |||
213 | 221 | ||
214 | lock->root = RootWindow(dpy, lock->screen); | 222 | lock->root = RootWindow(dpy, lock->screen); |
215 | 223 | ||
224 | for (i = 0; i < NUMCOLS; i++) { | ||
225 | XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), colorname[i], &color, &dummy); | ||
226 | lock->colors[i] = color.pixel; | ||
227 | } | ||
228 | |||
216 | /* init */ | 229 | /* init */ |
217 | wa.override_redirect = 1; | 230 | wa.override_redirect = 1; |
218 | wa.background_pixel = BlackPixel(dpy, lock->screen); | 231 | wa.background_pixel = lock->colors[INIT]; |
219 | lock->win = XCreateWindow(dpy, lock->root, 0, 0, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), | 232 | lock->win = XCreateWindow(dpy, lock->root, 0, 0, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen), |
220 | 0, DefaultDepth(dpy, lock->screen), CopyFromParent, | 233 | 0, DefaultDepth(dpy, lock->screen), CopyFromParent, |
221 | DefaultVisual(dpy, lock->screen), CWOverrideRedirect | CWBackPixel, &wa); | 234 | DefaultVisual(dpy, lock->screen), CWOverrideRedirect | CWBackPixel, &wa); |
222 | XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR2, &color, &dummy); | ||
223 | lock->colors[1] = color.pixel; | ||
224 | XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR1, &color, &dummy); | ||
225 | lock->colors[0] = color.pixel; | ||
226 | lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); | 235 | lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); |
227 | invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &color, 0, 0); | 236 | invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &color, 0, 0); |
228 | XDefineCursor(dpy, lock->win, invisible); | 237 | XDefineCursor(dpy, lock->win, invisible); |