~kris/suckless

slock

e5a9d8539b2ec56aacb1db455a4235e4d1ff41ca — bakkeby 5 years ago 35fd53f
Adding auto-timeout patch
4 files changed, 60 insertions(+), 4 deletions(-)

M README.md
M config.def.h
M patches.def.h
M slock.c
M README.md => README.md +4 -1
@@ 26,7 26,7 @@ slock tool, how to install it and how it works.

### Changelog:

2021-09-09 - Added the failure-command and secret-password patches
2021-09-09 - Added the auto-timeout, failure-command and secret-password patches

2021-06-08 - Added the color message patch



@@ 44,6 44,9 @@ slock tool, how to install it and how it works.
      - enables transparency for slock
      - intended to be combined with a compositor that can blur the transparent background

   - [auto-timeout](https://tools.suckless.org/slock/patches/auto-timeout/)
      - allows for a command to be executed after a specified time of inactivity

   - [blur_pixelated_screen](https://tools.suckless.org/slock/patches/blur-pixelated-screen/)
      - sets the lockscreen picture to a blured or pixelated screenshot


M config.def.h => config.def.h +11 -0
@@ 56,6 56,17 @@ static const float alpha = 0.9;
/* treat a cleared input like a wrong password (color) */
static const int failonclear = 1;

#if AUTO_TIMEOUT_PATCH
/* length of time (seconds) until */
static const int timeoffset = 60;

/* should [command] be run only once? */
static const int runonce = 0;

/* command to be run after [time] has passed */
static const char *command = "doas poweroff";
#endif // AUTO_TIMEOUT_PATCH

#if FAILURE_COMMAND_PATCH
/* number of failed password attempts until failcommand is executed.
   Set to 0 to disable */

M patches.def.h => patches.def.h +5 -0
@@ 16,6 16,11 @@
 */
#define ALPHA_PATCH 0

/* This patch allows for a command to be executed after a specified time of inactivity.
 * https://tools.suckless.org/slock/patches/auto-timeout/
 */
#define AUTO_TIMEOUT_PATCH 0

/* This patch sets the lockscreen picture to a blured or pixelated screenshot.
 * This patch depends on the Imlib2 library, uncomment the relevant line in
 * config.mk when enabling this patch.

M slock.c => slock.c +40 -3
@@ 33,9 33,9 @@
#if MEDIAKEYS_PATCH
#include <X11/XF86keysym.h>
#endif // MEDIAKEYS_PATCH
#if QUICKCANCEL_PATCH
#if QUICKCANCEL_PATCH || AUTO_TIMEOUT_PATCH
#include <time.h>
#endif // QUICKCANCEL_PATCH
#endif // QUICKCANCEL_PATCH / AUTO_TIMEOUT_PATCH
#if DPMS_PATCH
#include <X11/extensions/dpms.h>
#endif // DPMS_PATCH


@@ 48,6 48,10 @@ char *argv0;
int failtrack = 0;
#endif // FAILURE_COMMAND_PATCH

#if AUTO_TIMEOUT_PATCH
static time_t lasttouched;
int runflag = 0;
#endif // AUTO_TIMEOUT_PATCH
#if QUICKCANCEL_PATCH
static time_t locktime;
#endif // QUICKCANCEL_PATCH


@@ 193,6 197,9 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
	#endif // PAMAUTH_PATCH
	int num, screen, running, failure, oldc;
	unsigned int len, color;
	#if AUTO_TIMEOUT_PATCH
	time_t currenttime;
	#endif // AUTO_TIMEOUT_PATCH
	#if CAPSCOLOR_PATCH
	int caps;
	unsigned int indicators;


@@ 213,11 220,23 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
		caps = indicators & 1;

	#endif // CAPSCOLOR_PATCH
	while (running && !XNextEvent(dpy, &ev)) {
	#if AUTO_TIMEOUT_PATCH
	while (running)
	#else
	while (running && !XNextEvent(dpy, &ev))
	#endif // AUTO_TIMEOUT_PATCH
	{
		#if AUTO_TIMEOUT_PATCH
		while (XPending(dpy)) {
			XNextEvent(dpy, &ev);
		#endif // AUTO_TIMEOUT_PATCH
		#if QUICKCANCEL_PATCH
		running = !((time(NULL) - locktime < timetocancel) && (ev.type == MotionNotify));
		#endif // QUICKCANCEL_PATCH
		if (ev.type == KeyPress) {
			#if AUTO_TIMEOUT_PATCH
			time(&lasttouched);
			#endif // AUTO_TIMEOUT_PATCH
			explicit_bzero(&buf, sizeof(buf));
			num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0);
			if (IsKeypadKey(ksym)) {


@@ 394,6 413,20 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
			for (screen = 0; screen < nscreens; screen++)
				XRaiseWindow(dpy, locks[screen]->win);
		}

		#if AUTO_TIMEOUT_PATCH
		}

		time(&currenttime);

		if (currenttime >= lasttouched + timeoffset) {
			if (!runonce || !runflag) {
				runflag = 1;
				system(command);
			}
			lasttouched = currenttime;
		}
		#endif // AUTO_TIMEOUT_PATCH
	}
}



@@ 407,6 440,10 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
	XSetWindowAttributes wa;
	Cursor invisible;

	#if AUTO_TIMEOUT_PATCH
	time(&lasttouched);
	#endif // AUTO_TIMEOUT_PATCH

	if (dpy == NULL || screen < 0 || !(lock = malloc(sizeof(struct lock))))
		return NULL;