Blank the screen with color 0, add third color for failed logins - slock - simp… | |
git clone git://git.suckless.org/slock | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit f2ea92c3ddf1d9476ef61f85ec3aa26818d094a1 | |
parent a31b9191111572dafaa8366415b89a4472aa4626 | |
Author: David Phillips <[email protected]> | |
Date: Thu, 12 Feb 2015 11:56:35 +1300 | |
Blank the screen with color 0, add third color for failed logins | |
- Adds another color in config.def.h, COLOR_INIT | |
- Renames the colours from numerical ones to ones with meaningful names; | |
COLOR_INPUT for when there is content in the input buffer and COLOR_EMPTY | |
for when the input buffer has been cleared (backspaced or a failed attempt). | |
- Ensures XFreeColors frees the right number of colours. This is now derived | |
from the size of `Lock->colors` rather than being an integer literal. | |
- Makes slock exhibit the behaviour described by Markus | |
The default colours are the same as the ones slock currently uses, with the | |
exception of the new color, which I have set to red, as it indicates someone | |
has either failed an attempt to unlock, or that they have entered input and | |
erased it all. | |
Diffstat: | |
M config.def.h | 7 +++++-- | |
M slock.c | 27 ++++++++++++++++++--------- | |
2 files changed, 23 insertions(+), 11 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
@@ -1,2 +1,5 @@ | |
-#define COLOR1 "black" | |
-#define COLOR2 "#005577" | |
+static const char *colorname[NUMCOLS] = { | |
+ "black", /* after initialization */ | |
+ "#005577", /* during input */ | |
+ "#CC3333", /* failed/cleared the input */ | |
+}; | |
diff --git a/slock.c b/slock.c | |
@@ -22,13 +22,20 @@ | |
#include <bsd_auth.h> | |
#endif | |
+enum { | |
+ INIT, | |
+ INPUT, | |
+ EMPTY, | |
+ NUMCOLS | |
+}; | |
+ | |
#include "config.h" | |
typedef struct { | |
int screen; | |
Window root, win; | |
Pixmap pmap; | |
- unsigned long colors[2]; | |
+ unsigned long colors[NUMCOLS]; | |
} Lock; | |
static Lock **locks; | |
@@ -162,12 +169,12 @@ readpw(Display *dpy, const char *pws) | |
} | |
if (llen == 0 && len != 0) { | |
for (screen = 0; screen < nscreens; screen++) { | |
- XSetWindowBackground(dpy, locks[screen… | |
+ XSetWindowBackground(dpy, locks[screen… | |
XClearWindow(dpy, locks[screen]->win); | |
} | |
} else if (llen != 0 && len == 0) { | |
for (screen = 0; screen < nscreens; screen++) { | |
- XSetWindowBackground(dpy, locks[screen… | |
+ XSetWindowBackground(dpy, locks[screen… | |
XClearWindow(dpy, locks[screen]->win); | |
} | |
} | |
@@ -185,7 +192,7 @@ unlockscreen(Display *dpy, Lock *lock) | |
return; | |
XUngrabPointer(dpy, CurrentTime); | |
- XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, 2, … | |
+ XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, NUM… | |
XFreePixmap(dpy, lock->pmap); | |
XDestroyWindow(dpy, lock->win); | |
@@ -197,6 +204,7 @@ lockscreen(Display *dpy, int screen) | |
{ | |
char curs[] = {0, 0, 0, 0, 0, 0, 0, 0}; | |
unsigned int len; | |
+ int i; | |
Lock *lock; | |
XColor color, dummy; | |
XSetWindowAttributes wa; | |
@@ -213,16 +221,17 @@ lockscreen(Display *dpy, int screen) | |
lock->root = RootWindow(dpy, lock->screen); | |
+ for (i = 0; i < NUMCOLS; i++) { | |
+ XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), colo… | |
+ lock->colors[i] = color.pixel; | |
+ } | |
+ | |
/* init */ | |
wa.override_redirect = 1; | |
- wa.background_pixel = BlackPixel(dpy, lock->screen); | |
+ wa.background_pixel = lock->colors[INIT]; | |
lock->win = XCreateWindow(dpy, lock->root, 0, 0, DisplayWidth(dpy, loc… | |
0, DefaultDepth(dpy, lock->screen), CopyFrom… | |
DefaultVisual(dpy, lock->screen), CWOverride… | |
- XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR2, &col… | |
- lock->colors[1] = color.pixel; | |
- XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR1, &col… | |
- lock->colors[0] = color.pixel; | |
lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8); | |
invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &… | |
XDefineCursor(dpy, lock->win, invisible); |