slock

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit c07648d3f9226db04db0711fc62693f5317e9609
parent 4b280b29ef50782e5b0dfba7112a55865b4748a2
Author: bakkeby <bakkeby@gmail.com>
Date:   Mon,  3 Aug 2020 15:53:34 +0200

Adding keypress_feedback patch

Diffstat:
MREADME.md | 5+++++
Mconfig.def.h | 16++++++++++++++++
Mpatch/include.c | 4++++
Mpatch/include.h | 4++++
Apatch/keypress_feedback.c | 29+++++++++++++++++++++++++++++
Apatch/keypress_feedback.h | 2++
Mpatches.def.h | 16+++++++++++-----
Mslock.c | 16++++++++++++++++
8 files changed, 87 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md @@ -15,6 +15,8 @@ Refer to [https://tools.suckless.org/slock/](https://tools.suckless.org/slock/) ### Changelog: +2020-08-03 - Added keypress_feedback patch + 2019-11-27 - Added xresources patch 2019-10-17 - Added capscolor, control clear, dpms, mediakeys, message, pam auth, quickcancel patches @@ -34,6 +36,9 @@ Refer to [https://tools.suckless.org/slock/](https://tools.suckless.org/slock/) - interacts with the Display Power Signaling and automatically shuts down the monitor after a configurable amount of seconds - the monitor will automatically be activated by pressing a key or moving the mouse and the password can be entered then + - [keypress_feedback](https://tools.suckless.org/slock/patches/keypress-feedback/) + - draws random blocks on the screen to display keypress feedback + - [mediakeys](https://tools.suckless.org/slock/patches/mediakeys/) - allows media keys to be used while the screen is locked, e.g. adjust volume or skip to the next song without having to unlock the screen first diff --git a/config.def.h b/config.def.h @@ -12,6 +12,9 @@ static const char *colorname[NUMCOLS] = { #if PAMAUTH_PATCH [PAM] = "#9400D3", /* waiting for PAM */ #endif // PAMAUTH_PATCH + #if KEYPRESS_FEEDBACK_PATCH + [BLOCKS] = "#ffffff", /* key feedback block */ + #endif // KEYPRESS_FEEDBACK_PATCH }; #if XRESOURCES_PATCH @@ -44,6 +47,19 @@ static const int controlkeyclear = 0; static const int monitortime = 5; #endif // DPMS_PATCH +#if KEYPRESS_FEEDBACK_PATCH +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; +#endif // KEYPRESS_FEEDBACK_PATCH + #if MESSAGE_PATCH /* default message */ static const char * message = "Suckless: Software that sucks less."; diff --git a/patch/include.c b/patch/include.c @@ -3,6 +3,10 @@ #include "message.c" #endif +#if KEYPRESS_FEEDBACK_PATCH +#include "keypress_feedback.c" +#endif + #if PAMAUTH_PATCH #include "pamauth.c" #endif diff --git a/patch/include.h b/patch/include.h @@ -3,6 +3,10 @@ #include "pamauth.h" #endif +#if KEYPRESS_FEEDBACK_PATCH +#include "keypress_feedback.h" +#endif + #if XRESOURCES_PATCH #include "xresources.h" #endif \ No newline at end of file diff --git a/patch/keypress_feedback.c b/patch/keypress_feedback.c @@ -0,0 +1,28 @@ +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; + if (blocks_height == 0 || blocks_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 = blocks_width ? blocks_width : screen_width; + height = blocks_height ? blocks_height : screen_height; + } + + unsigned int block_width = width / blocks_count; + unsigned int position = rand() % blocks_count; + + XClearWindow(dpy, win); + XFillRectangle(dpy, win, gc, blocks_x + position*block_width, blocks_y, width, height); + + XFreeGC(dpy, gc); +} +\ No newline at end of file diff --git a/patch/keypress_feedback.h b/patch/keypress_feedback.h @@ -0,0 +1 @@ +static void draw_key_feedback(Display *dpy, struct lock **locks, int screen); +\ No newline at end of file diff --git a/patches.def.h b/patches.def.h @@ -23,13 +23,19 @@ #define CONTROLCLEAR_PATCH 0 /* This patch interacts with the Display Power Signaling and automatically shuts down -* the monitor after a configurable amount of seconds. -* The monitor will automatically be activated by pressing a key or moving the mouse -* and the password can be entered then. -* https://tools.suckless.org/slock/patches/dpms/ -*/ + * the monitor after a configurable amount of seconds. + * The monitor will automatically be activated by pressing a key or moving the mouse + * and the password can be entered then. + * https://tools.suckless.org/slock/patches/dpms/ + */ #define DPMS_PATCH 0 +/* Draws random blocks on the screen to display keypress feedback. + * https://tools.suckless.org/slock/patches/keypress-feedback/ + * https://patch-diff.githubusercontent.com/raw/phenax/bslock/pull/2.diff + */ +#define KEYPRESS_FEEDBACK_PATCH 0 + /* This patch allows media keys to be used while the screen is locked. Allows for volume * to be adjusted or to skip to the next song without having to unlock the screen first. * https://tools.suckless.org/slock/patches/mediakeys/ diff --git a/slock.c b/slock.c @@ -20,6 +20,9 @@ #include <X11/Xutil.h> #include "patches.h" +#if KEYPRESS_FEEDBACK_PATCH +#include <time.h> +#endif // KEYPRESS_FEEDBACK_PATCH #if CAPSCOLOR_PATCH #include <X11/XKBlib.h> #endif // CAPSCOLOR_PATCH @@ -52,6 +55,9 @@ enum { #if PAMAUTH_PATCH PAM, #endif // PAMAUTH_PATCH + #if KEYPRESS_FEEDBACK_PATCH + BLOCKS, + #endif // KEYPRESS_FEEDBACK_PATCH NUMCOLS }; @@ -301,6 +307,11 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens, memcpy(passwd + len, buf, num); len += num; } + #if KEYPRESS_FEEDBACK_PATCH + if (blocks_enabled) + for (screen = 0; screen < nscreens; screen++) + draw_key_feedback(dpy, locks, screen); + #endif // KEYPRESS_FEEDBACK_PATCH break; } #if CAPSCOLOR_PATCH @@ -521,6 +532,11 @@ main(int argc, char **argv) { config_init(dpy); #endif // XRESOURCES_PATCH + #if KEYPRESS_FEEDBACK_PATCH + time_t t; + srand((unsigned) time(&t)); + #endif // KEYPRESS_FEEDBACK_PATCH + /* check for Xrandr support */ rr.active = XRRQueryExtension(dpy, &rr.evbase, &rr.errbase);