From 7d074a5ab64a0cbeb925fdbcaa66a126dff09e07 Mon Sep 17 00:00:00 2001 From: Alexander Bocken Date: Mon, 5 Jul 2021 14:38:41 +0200 Subject: [PATCH] reset to slock 1.4 --- README | 3 - config.def.h | 12 + config.h | 9 + patches/slock-message-20191002-b46028b.diff | 250 ------------------ .../slock-terminalkeys-20160618-65b8d52.diff | 27 -- slock.c | 3 +- 6 files changed, 23 insertions(+), 281 deletions(-) create mode 100644 config.def.h delete mode 100644 patches/slock-message-20191002-b46028b.diff delete mode 100644 patches/slock-terminalkeys-20160618-65b8d52.diff diff --git a/README b/README index 5235db1..dcacd01 100644 --- a/README +++ b/README @@ -2,9 +2,6 @@ slock - simple screen locker ============================ simple screen locker utility for X. -Added patch unlock_screen -not much different from the original though - Requirements ------------ diff --git a/config.def.h b/config.def.h new file mode 100644 index 0000000..9855e21 --- /dev/null +++ b/config.def.h @@ -0,0 +1,12 @@ +/* user and group to drop privileges to */ +static const char *user = "nobody"; +static const char *group = "nogroup"; + +static const char *colorname[NUMCOLS] = { + [INIT] = "black", /* after initialization */ + [INPUT] = "#005577", /* during input */ + [FAILED] = "#CC3333", /* wrong password */ +}; + +/* treat a cleared input like a wrong password (color) */ +static const int failonclear = 1; diff --git a/config.h b/config.h index f568668..675cabb 100644 --- a/config.h +++ b/config.h @@ -10,3 +10,12 @@ static const char *colorname[NUMCOLS] = { /* treat a cleared input like a wrong password (color) */ static const int failonclear = 1; + +/*Enable blur*/ +//#define BLUR +/*Set blur radius*/ +static const int blurRadius=5; +/*Enable Pixelation*/ +#define PIXELATION +/*Set pixelation radius*/ +static const int pixelSize=10; diff --git a/patches/slock-message-20191002-b46028b.diff b/patches/slock-message-20191002-b46028b.diff deleted file mode 100644 index 54b17e6..0000000 --- a/patches/slock-message-20191002-b46028b.diff +++ /dev/null @@ -1,250 +0,0 @@ -From b46028b2797b886154258dcafe71c349cdc68b43 Mon Sep 17 00:00:00 2001 -From: Blair Drummond -Date: Wed, 2 Oct 2019 14:59:00 -0400 -Subject: [PATCH] Add a message command. Fixes old version's bugs. - ---- - config.def.h | 9 ++++ - config.mk | 2 +- - slock.1 | 7 +++ - slock.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++-- - 4 files changed, 133 insertions(+), 5 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 9855e21..c2a0ab2 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -10,3 +10,12 @@ static const char *colorname[NUMCOLS] = { - - /* treat a cleared input like a wrong password (color) */ - static const int failonclear = 1; -+ -+/* default message */ -+static const char * message = "Suckless: Software that sucks less."; -+ -+/* text color */ -+static const char * text_color = "#ffffff"; -+ -+/* text size (must be a valid size) */ -+static const char * font_name = "6x10"; -diff --git a/config.mk b/config.mk -index 74429ae..c4ccf66 100644 ---- a/config.mk -+++ b/config.mk -@@ -12,7 +12,7 @@ X11LIB = /usr/X11R6/lib - - # includes and libs - INCS = -I. -I/usr/include -I${X11INC} --LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -+LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lXinerama - - # flags - CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H -diff --git a/slock.1 b/slock.1 -index 82cdcd6..946165f 100644 ---- a/slock.1 -+++ b/slock.1 -@@ -6,6 +6,8 @@ - .Sh SYNOPSIS - .Nm - .Op Fl v -+.Op Fl f -+.Op Fl m Ar message - .Op Ar cmd Op Ar arg ... - .Sh DESCRIPTION - .Nm -@@ -16,6 +18,11 @@ is executed after the screen has been locked. - .Bl -tag -width Ds - .It Fl v - Print version information to stdout and exit. -+.It Fl f -+List all valid X fonts and exit. -+.It Fl m Ar message -+Overrides default slock lock message. -+.TP - .El - .Sh SECURITY CONSIDERATIONS - To make sure a locked screen can not be bypassed by switching VTs -diff --git a/slock.c b/slock.c -index 5ae738c..610929b 100644 ---- a/slock.c -+++ b/slock.c -@@ -15,6 +15,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -24,6 +25,9 @@ - - char *argv0; - -+/* global count to prevent repeated error messages */ -+int count_error = 0; -+ - enum { - INIT, - INPUT, -@@ -83,6 +87,98 @@ dontkillme(void) - } - #endif - -+static void -+writemessage(Display *dpy, Window win, int screen) -+{ -+ int len, line_len, width, height, s_width, s_height, i, j, k, tab_replace, tab_size; -+ XGCValues gr_values; -+ XFontStruct *fontinfo; -+ XColor color, dummy; -+ XineramaScreenInfo *xsi; -+ GC gc; -+ fontinfo = XLoadQueryFont(dpy, font_name); -+ -+ if (fontinfo == NULL) { -+ if (count_error == 0) { -+ fprintf(stderr, "slock: Unable to load font \"%s\"\n", font_name); -+ fprintf(stderr, "slock: Try listing fonts with 'slock -f'\n"); -+ count_error++; -+ } -+ return; -+ } -+ -+ tab_size = 8 * XTextWidth(fontinfo, " ", 1); -+ -+ XAllocNamedColor(dpy, DefaultColormap(dpy, screen), -+ text_color, &color, &dummy); -+ -+ gr_values.font = fontinfo->fid; -+ gr_values.foreground = color.pixel; -+ gc=XCreateGC(dpy,win,GCFont+GCForeground, &gr_values); -+ -+ /* To prevent "Uninitialized" warnings. */ -+ xsi = NULL; -+ -+ /* -+ * Start formatting and drawing text -+ */ -+ -+ len = strlen(message); -+ -+ /* Max max line length (cut at '\n') */ -+ line_len = 0; -+ k = 0; -+ for (i = j = 0; i < len; i++) { -+ if (message[i] == '\n') { -+ if (i - j > line_len) -+ line_len = i - j; -+ k++; -+ i++; -+ j = i; -+ } -+ } -+ /* If there is only one line */ -+ if (line_len == 0) -+ line_len = len; -+ -+ if (XineramaIsActive(dpy)) { -+ xsi = XineramaQueryScreens(dpy, &i); -+ s_width = xsi[0].width; -+ s_height = xsi[0].height; -+ } else { -+ s_width = DisplayWidth(dpy, screen); -+ s_height = DisplayHeight(dpy, screen); -+ } -+ -+ height = s_height*3/7 - (k*20)/3; -+ width = (s_width - XTextWidth(fontinfo, message, line_len))/2; -+ -+ /* Look for '\n' and print the text between them. */ -+ for (i = j = k = 0; i <= len; i++) { -+ /* i == len is the special case for the last line */ -+ if (i == len || message[i] == '\n') { -+ tab_replace = 0; -+ while (message[j] == '\t' && j < i) { -+ tab_replace++; -+ j++; -+ } -+ -+ XDrawString(dpy, win, gc, width + tab_size*tab_replace, height + 20*k, message + j, i - j); -+ while (i < len && message[i] == '\n') { -+ i++; -+ j = i; -+ k++; -+ } -+ } -+ } -+ -+ /* xsi should not be NULL anyway if Xinerama is active, but to be safe */ -+ if (XineramaIsActive(dpy) && xsi != NULL) -+ XFree(xsi); -+} -+ -+ -+ - static const char * - gethash(void) - { -@@ -194,6 +290,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, - locks[screen]->win, - locks[screen]->colors[color]); - XClearWindow(dpy, locks[screen]->win); -+ writemessage(dpy, locks[screen]->win, screen); - } - oldc = color; - } -@@ -300,7 +397,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) - static void - usage(void) - { -- die("usage: slock [-v] [cmd [arg ...]]\n"); -+ die("usage: slock [-v] [-f] [-m message] [cmd [arg ...]]\n"); - } - - int -@@ -313,12 +410,25 @@ main(int argc, char **argv) { - gid_t dgid; - const char *hash; - Display *dpy; -- int s, nlocks, nscreens; -+ int i, s, nlocks, nscreens; -+ int count_fonts; -+ char **font_names; - - ARGBEGIN { - case 'v': - fprintf(stderr, "slock-"VERSION"\n"); - return 0; -+ case 'm': -+ message = EARGF(usage()); -+ break; -+ case 'f': -+ if (!(dpy = XOpenDisplay(NULL))) -+ die("slock: cannot open display\n"); -+ font_names = XListFonts(dpy, "*", 10000 /* list 10000 fonts*/, &count_fonts); -+ for (i=0; iwin, s); - nlocks++; -- else -+ } else { - break; -+ } - } - XSync(dpy, 0); - --- -2.20.1 - diff --git a/patches/slock-terminalkeys-20160618-65b8d52.diff b/patches/slock-terminalkeys-20160618-65b8d52.diff deleted file mode 100644 index afcb874..0000000 --- a/patches/slock-terminalkeys-20160618-65b8d52.diff +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/slock.c b/slock.c -index c9cdee2..03e191d 100644 ---- a/slock.c -+++ b/slock.c -@@ -149,6 +149,22 @@ readpw(Display *dpy, const char *pws) - IsPFKey(ksym) || - IsPrivateKeypadKey(ksym)) - continue; -+ if (ev.xkey.state & ControlMask) { -+ switch (ksym) { -+ case XK_u: -+ ksym = XK_Escape; -+ break; -+ case XK_m: -+ ksym = XK_Return; -+ break; -+ case XK_j: -+ ksym = XK_Return; -+ break; -+ case XK_h: -+ ksym = XK_BackSpace; -+ break; -+ } -+ } - switch (ksym) { - case XK_Return: - passwd[len] = 0; diff --git a/slock.c b/slock.c index 30db951..5ae738c 100644 --- a/slock.c +++ b/slock.c @@ -262,7 +262,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) ptgrab = XGrabPointer(dpy, lock->root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask, GrabModeAsync, - GrabModeAsync, None, None, CurrentTime); + GrabModeAsync, None, invisible, CurrentTime); } if (kbgrab != GrabSuccess) { kbgrab = XGrabKeyboard(dpy, lock->root, True, @@ -271,6 +271,7 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) /* input is grabbed: we can lock the screen */ if (ptgrab == GrabSuccess && kbgrab == GrabSuccess) { + XMapRaised(dpy, lock->win); if (rr->active) XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask);