This commit is contained in:
zcake 2021-02-08 17:28:04 +08:00
parent 59c750c40d
commit 25dc3f7ff2
10 changed files with 102 additions and 30 deletions

2
README
View File

@ -1,6 +1,6 @@
slock - simple screen locker
============================
simple screen locker utility for X.
simple screen locker utility for X.
Requirements

BIN
a.out

Binary file not shown.

View File

@ -1,6 +1,6 @@
/* user and group to drop privileges to */
static const char *user = "nobody";
static const char *group = "nogroup";
static const char *user = "kc";
static const char *group = "kc";
static const char *colorname[NUMCOLS] = {
[INIT] = "black", /* after initialization */
@ -18,4 +18,4 @@ static const int blurRadius=5;
/*Enable Pixelation*/
//#define PIXELATION
/*Set pixelation radius*/
static const int pixelSize=0;
static const int pixelSize=2;

View File

@ -18,4 +18,4 @@ static const int blurRadius=5;
/*Enable Pixelation*/
//#define PIXELATION
/*Set pixelation radius*/
static const int pixelSize=0;
static const int pixelSize=1;

31
patches/1.diff Normal file
View File

@ -0,0 +1,31 @@
diff --git a/slock.c b/slock.c
index 5ae738c..bd54be2 100644
--- a/slock.c
+++ b/slock.c
@@ -18,6 +18,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
+#include <X11/XF86keysym.h>
#include "arg.h"
#include "util.h"
@@ -157,6 +158,18 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
IsPrivateKeypadKey(ksym))
continue;
switch (ksym) {
+ case XF86XK_AudioPlay:
+ case XF86XK_AudioStop:
+ case XF86XK_AudioPrev:
+ case XF86XK_AudioNext:
+ case XF86XK_AudioRaiseVolume:
+ case XF86XK_AudioLowerVolume:
+ case XF86XK_AudioMute:
+ case XF86XK_AudioMicMute:
+ case XF86XK_MonBrightnessDown:
+ case XF86XK_MonBrightnessUp:
+ XSendEvent(dpy, DefaultRootWindow(dpy), True, KeyPressMask, &ev);
+ break;
case XK_Return:
passwd[len] = '\0';
errno = 0;

BIN
slock

Binary file not shown.

51
slock.c
View File

@ -6,6 +6,7 @@
#include <ctype.h>
#include <errno.h>
#include <Imlib2.h>
#include <grp.h>
#include <pwd.h>
#include <stdarg.h>
@ -18,7 +19,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <Imlib2.h>
#include <X11/XF86keysym.h>
#include "arg.h"
#include "util.h"
@ -161,6 +162,18 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
IsPrivateKeypadKey(ksym))
continue;
switch (ksym) {
case XF86XK_AudioPlay:
case XF86XK_AudioStop:
case XF86XK_AudioPrev:
case XF86XK_AudioNext:
case XF86XK_AudioRaiseVolume:
case XF86XK_AudioLowerVolume:
case XF86XK_AudioMute:
case XF86XK_AudioMicMute:
case XF86XK_MonBrightnessDown:
case XF86XK_MonBrightnessUp:
XSendEvent(dpy, DefaultRootWindow(dpy), True, KeyPressMask, &ev);
break;
case XK_Return:
passwd[len] = '\0';
errno = 0;
@ -181,7 +194,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
break;
case XK_BackSpace:
if (len)
passwd[len--] = '\0';
passwd[--len] = '\0';
break;
default:
if (num && !iscntrl((int)buf[0]) &&
@ -206,13 +219,21 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
rre = (XRRScreenChangeNotifyEvent*)&ev;
for (screen = 0; screen < nscreens; screen++) {
if (locks[screen]->win == rre->window) {
XResizeWindow(dpy, locks[screen]->win,
rre->width, rre->height);
if (rre->rotation == RR_Rotate_90 ||
rre->rotation == RR_Rotate_270)
XResizeWindow(dpy, locks[screen]->win,
rre->height, rre->width);
else
XResizeWindow(dpy, locks[screen]->win,
rre->width, rre->height);
XClearWindow(dpy, locks[screen]->win);
break;
}
}
} else for (screen = 0; screen < nscreens; screen++)
XRaiseWindow(dpy, locks[screen]->win);
} else {
for (screen = 0; screen < nscreens; screen++)
XRaiseWindow(dpy, locks[screen]->win);
}
}
}
@ -324,8 +345,7 @@ main(int argc, char **argv) {
const char *hash;
Display *dpy;
int s, nlocks, nscreens;
int w, h;
int up_x, up_y, up_w, up_h;
ARGBEGIN {
case 'v':
fprintf(stderr, "slock-"VERSION"\n");
@ -365,29 +385,20 @@ main(int argc, char **argv) {
die("slock: setgid: %s\n", strerror(errno));
if (setuid(duid) < 0)
die("slock: setuid: %s\n", strerror(errno));
/*Create screenshot Image*/
Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy));
image = imlib_load_image("/home/kc/Pictures/wallpaper/wallhaven-4ypdol.png");
/* get its size */
imlib_context_set_image(image);
w = imlib_image_get_width();
h = imlib_image_get_height();
/* now we want to work with the buffer */
imlib_blend_image_onto_image(image, 0,
0, 0, w, h,
0, 0, scr->width, scr->height);
/*
image = imlib_create_image(scr->width,scr->height);
imlib_context_set_image(image);
imlib_context_set_display(dpy);
imlib_context_set_visual(DefaultVisual(dpy,0));
imlib_context_set_drawable(RootWindow(dpy,XScreenNumberOfScreen(scr)));
imlib_copy_drawable_to_image(0,0,0,scr->width,scr->height,0,0,1);
*/
#ifdef BLUR
/*Blur function*/
//Z imlib_image_blur(blurRadius);
imlib_image_blur(blurRadius);
#endif // BLUR
#ifdef PIXELATION

View File

@ -18,6 +18,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/XF86keysym.h>
#include "arg.h"
#include "util.h"
@ -157,6 +158,18 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
IsPrivateKeypadKey(ksym))
continue;
switch (ksym) {
case XF86XK_AudioPlay:
case XF86XK_AudioStop:
case XF86XK_AudioPrev:
case XF86XK_AudioNext:
case XF86XK_AudioRaiseVolume:
case XF86XK_AudioLowerVolume:
case XF86XK_AudioMute:
case XF86XK_AudioMicMute:
case XF86XK_MonBrightnessDown:
case XF86XK_MonBrightnessUp:
XSendEvent(dpy, DefaultRootWindow(dpy), True, KeyPressMask, &ev);
break;
case XK_Return:
passwd[len] = '\0';
errno = 0;
@ -177,7 +190,7 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
break;
case XK_BackSpace:
if (len)
passwd[len--] = '\0';
passwd[--len] = '\0';
break;
default:
if (num && !iscntrl((int)buf[0]) &&
@ -201,13 +214,21 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
rre = (XRRScreenChangeNotifyEvent*)&ev;
for (screen = 0; screen < nscreens; screen++) {
if (locks[screen]->win == rre->window) {
XResizeWindow(dpy, locks[screen]->win,
rre->width, rre->height);
if (rre->rotation == RR_Rotate_90 ||
rre->rotation == RR_Rotate_270)
XResizeWindow(dpy, locks[screen]->win,
rre->height, rre->width);
else
XResizeWindow(dpy, locks[screen]->win,
rre->width, rre->height);
XClearWindow(dpy, locks[screen]->win);
break;
}
}
} else for (screen = 0; screen < nscreens; screen++)
XRaiseWindow(dpy, locks[screen]->win);
} else {
for (screen = 0; screen < nscreens; screen++)
XRaiseWindow(dpy, locks[screen]->win);
}
}
}

9
slock.c.rej Normal file
View File

@ -0,0 +1,9 @@
--- slock.c
+++ slock.c
@@ -18,6 +18,7 @@
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include "arg.h"
#include "util.h"

BIN
slock.o

Binary file not shown.