Adding keypress_feedback patch

This commit is contained in:
bakkeby 2020-08-03 15:53:34 +02:00
parent 4b280b29ef
commit c07648d3f9
8 changed files with 85 additions and 5 deletions

View File

@ -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

View File

@ -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.";

View File

@ -3,6 +3,10 @@
#include "message.c"
#endif
#if KEYPRESS_FEEDBACK_PATCH
#include "keypress_feedback.c"
#endif
#if PAMAUTH_PATCH
#include "pamauth.c"
#endif

View File

@ -3,6 +3,10 @@
#include "pamauth.h"
#endif
#if KEYPRESS_FEEDBACK_PATCH
#include "keypress_feedback.h"
#endif
#if XRESOURCES_PATCH
#include "xresources.h"
#endif

28
patch/keypress_feedback.c Normal file
View File

@ -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);
}

View File

@ -0,0 +1 @@
static void draw_key_feedback(Display *dpy, struct lock **locks, int screen);

View File

@ -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/

16
slock.c
View File

@ -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);