Hi guys,

Here is a patch that uses a different background colour when caps lock
is on.

Cheers,
Thiébaud
diff -up slock-1.1/config.mk slock-1.1.new/config.mk
--- slock-1.1/config.mk	2014-04-27 18:28:22.635615638 +1000
+++ slock-1.1.new/config.mk	2014-04-27 18:39:23.874262103 +1000
@@ -14,7 +14,7 @@ INCS = -I. -I/usr/include -I${X11INC}
 LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext
 
 # flags
-CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H -DCOLOR1=\"black\" -DCOLOR2=\"\#005577\"
+CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H -DCOLOR1=\"black\" -DCOLOR2=\"\#005577\" -DCOLOR3=\"\#AA0000\"
 CFLAGS += -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
 LDFLAGS += ${LIBS}
 
diff -up slock-1.1/slock.c slock-1.1.new/slock.c
--- slock-1.1/slock.c	2012-10-26 06:00:04.000000000 +1100
+++ slock-1.1.new/slock.c	2014-04-27 18:43:53.669454005 +1000
@@ -27,7 +27,7 @@ typedef struct {
 	int screen;
 	Window root, win;
 	Pixmap pmap;
-	unsigned long colors[2];
+	unsigned long colors[3];
 } Lock;
 
 static Lock **locks;
@@ -83,7 +83,7 @@ readpw(Display *dpy, const char *pws)
 {
 	char buf[32], passwd[256];
 	int num, screen;
-	unsigned int len, llen;
+	unsigned int len, llen, caps_state;
 	KeySym ksym;
 	XEvent ev;
 
@@ -134,9 +134,13 @@ readpw(Display *dpy, const char *pws)
 				}
 				break;
 			}
-			if(llen == 0 && len != 0) {
+			caps_state = ev.xkey.state && LockMask;
+			if((llen == 0 && len != 0)) {
 				for(screen = 0; screen < nscreens; screen++) {
-					XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[1]);
+					if(caps_state)
+						XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[2]);
+					else
+						XSetWindowBackground(dpy, locks[screen]->win, locks[screen]->colors[1]);
 					XClearWindow(dpy, locks[screen]->win);
 				}
 			} else if(llen != 0 && len == 0) {
@@ -158,7 +162,7 @@ unlockscreen(Display *dpy, Lock *lock) {
 		return;
 
 	XUngrabPointer(dpy, CurrentTime);
-	XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, 2, 0);
+	XFreeColors(dpy, DefaultColormap(dpy, lock->screen), lock->colors, 3, 0);
 	XFreePixmap(dpy, lock->pmap);
 	XDestroyWindow(dpy, lock->win);
 
@@ -191,6 +195,8 @@ lockscreen(Display *dpy, int screen) {
 	lock->win = XCreateWindow(dpy, lock->root, 0, 0, DisplayWidth(dpy, lock->screen), DisplayHeight(dpy, lock->screen),
 			0, DefaultDepth(dpy, lock->screen), CopyFromParent,
 			DefaultVisual(dpy, lock->screen), CWOverrideRedirect | CWBackPixel, &wa);
+	XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR3, &color, &dummy);
+	lock->colors[2] = color.pixel;
 	XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR2, &color, &dummy);
 	lock->colors[1] = color.pixel;
 	XAllocNamedColor(dpy, DefaultColormap(dpy, lock->screen), COLOR1, &color, &dummy);

Reply via email to