diff options
Diffstat (limited to 'patches/slock-key-feedback.diff')
-rw-r--r-- | patches/slock-key-feedback.diff | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/patches/slock-key-feedback.diff b/patches/slock-key-feedback.diff deleted file mode 100644 index b479518..0000000 --- a/patches/slock-key-feedback.diff +++ /dev/null @@ -1,113 +0,0 @@ -diff --git a/config.def.h b/config.def.h -index 9855e21..29734e2 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -6,7 +6,23 @@ static const char *colorname[NUMCOLS] = { - [INIT] = "black", /* after initialization */ - [INPUT] = "#005577", /* during input */ - [FAILED] = "#CC3333", /* wrong password */ -+ [BLOCKS] = "#ffffff", /* key feedback block */ - }; - - /* treat a cleared input like a wrong password (color) */ - static const int failonclear = 1; -+ -+ -+// ### Blocks bar ### -+static short int blocks_enabled = 1; // 0 = don't show blocks -+static const int blocks_width = 0; // 0 = full width -+static const int blocks_height = 16; -+ -+// position -+static const int blocks_x = 0; -+static const int blocks_y = 0; -+ -+// Number of blocks -+static const int blocks_count = 10; -+// ### \Blocks bar ### -+ -diff --git a/slock.c b/slock.c -index 5ae738c..cf52710 100644 ---- a/slock.c -+++ b/slock.c -@@ -13,6 +13,7 @@ - #include <stdio.h> - #include <string.h> - #include <unistd.h> -+#include <time.h> - #include <sys/types.h> - #include <X11/extensions/Xrandr.h> - #include <X11/keysym.h> -@@ -28,7 +29,8 @@ enum { - INIT, - INPUT, - FAILED, -- NUMCOLS -+ BLOCKS, -+ NUMCOLS, - }; - - struct lock { -@@ -83,7 +85,40 @@ dontkillme(void) - } - #endif - --static const char * -+static void -+draw_key_feedback(Display *dpy, struct lock **locks, int screen) -+{ -+ XGCValues gr_values; -+ -+ Window win = locks[screen]->win; -+ Window root_win; -+ -+ gr_values.foreground = locks[screen]->colors[BLOCKS]; -+ GC gc = XCreateGC(dpy, win, GCForeground, &gr_values); -+ -+ int width = blocks_width, -+ height = blocks_height, -+ x = blocks_x, -+ y = blocks_y; -+ -+ if (height == 0 || width == 0) { -+ int _x, _y; -+ unsigned int screen_width, screen_height, _b, _d; -+ XGetGeometry(dpy, win, &root_win, &_x, &_y, &screen_width, &screen_height, &_b, &_d); -+ width = width ? width : screen_width; -+ height = height ? height : screen_height; -+ } -+ -+ unsigned int block_width = width / blocks_count; -+ unsigned int position = rand() % blocks_count; -+ -+ XClearWindow(dpy, win); -+ XFillRectangle(dpy, win, gc, x + position*block_width, y, block_width, height); -+ -+ XFreeGC(dpy, gc); -+} -+ -+ static const char * - gethash(void) - { - const char *hash; -@@ -185,6 +220,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, - memcpy(passwd + len, buf, num); - len += num; - } -+ if (blocks_enabled) -+ for (screen = 0; screen < nscreens; screen++) -+ draw_key_feedback(dpy, locks, screen); - break; - } - color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT); -@@ -355,6 +393,10 @@ main(int argc, char **argv) { - if (setuid(duid) < 0) - die("slock: setuid: %s\n", strerror(errno)); - -+ time_t t; -+ srand((unsigned) time(&t)); -+ -+ - /* check for Xrandr support */ - rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase); - |