commit 35f284382cef576ef4f7460717d4a1ea5d166c7d
parent e93bcd909faead037d063cb7570b87270b467bd5
Author: Chad Humphries <chad.humphries@grunclepug.com>
Date: Sun, 2 Nov 2025 23:44:02 -0800
Add slock bordercolors patch
A patch for slock to replace the colored background with a colored border.
Diffstat:
2 files changed, 64 insertions(+), 0 deletions(-)
diff --git a/tools.suckless.org/slock/patches/bordercolors/index.md b/tools.suckless.org/slock/patches/bordercolors/index.md
@@ -0,0 +1,15 @@
+Bordercolors
+================
+
+Description
+-----------
+Changes default coloring behavior to use the window's colored border for
+input status feedback instead of changing the entire background.
+
+Download
+--------
+* [slock-bordercolors-1.6.diff](slock-bordercolors-1.6.diff)
+
+Authors
+-------
+* Chad Humphries <chad.humphries@grunclepug.com>
diff --git a/tools.suckless.org/slock/patches/bordercolors/slock-bordercolors-1.6.diff b/tools.suckless.org/slock/patches/bordercolors/slock-bordercolors-1.6.diff
@@ -0,0 +1,49 @@
+diff --git a/config.def.h b/config.def.h
+index 9855e21..c8b97d6 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -10,3 +10,6 @@ static const char *colorname[NUMCOLS] = {
+
+ /* treat a cleared input like a wrong password (color) */
+ static const int failonclear = 1;
++
++/* border width in pixels */
++static const int BORDER_WIDTH = 4;
+diff --git a/slock.c b/slock.c
+index f16781f..e2a0a4e 100644
+--- a/slock.c
++++ b/slock.c
+@@ -194,11 +194,12 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
+ color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
+ if (running && oldc != color) {
+ for (screen = 0; screen < nscreens; screen++) {
+- XSetWindowBackground(dpy,
++ XSetWindowBorder(dpy,
+ locks[screen]->win,
+ locks[screen]->colors[color]);
+- XClearWindow(dpy, locks[screen]->win);
++ // XClearWindow(dpy, locks[screen]->win);
+ }
++ XSync(dpy, False);
+ oldc = color;
+ }
+ } else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) {
+@@ -248,13 +249,14 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
+ /* init */
+ wa.override_redirect = 1;
+ wa.background_pixel = lock->colors[INIT];
++ wa.border_pixel = lock->colors[INIT];
+ lock->win = XCreateWindow(dpy, lock->root, 0, 0,
+- DisplayWidth(dpy, lock->screen),
+- DisplayHeight(dpy, lock->screen),
+- 0, DefaultDepth(dpy, lock->screen),
++ DisplayWidth(dpy, lock->screen) - 2 * BORDER_WIDTH,
++ DisplayHeight(dpy, lock->screen) - 2 * BORDER_WIDTH,
++ BORDER_WIDTH, DefaultDepth(dpy, lock->screen),
+ CopyFromParent,
+ DefaultVisual(dpy, lock->screen),
+- CWOverrideRedirect | CWBackPixel, &wa);
++ CWOverrideRedirect | CWBackPixel | CWBorderPixel, &wa);
+ lock->pmap = XCreateBitmapFromData(dpy, lock->win, curs, 8, 8);
+ invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap,
+ &color, &color, 0, 0);