slock-foreground-image-20211210.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
slock-foreground-image-20211210.diff (2564B)
---
1 From: Viliam Kováč <viliamkovac1223@gmail.com>
2 Date: Fri, 10 Dec 2021 17:22:00
3 Subject: [PATCH] Add a image foreground
4 diff --git a/config.def.h b/config.def.h
5 index 9855e21..dfa61d6 100644
6 --- a/config.def.h
7 +++ b/config.def.h
8 @@ -10,3 +10,10 @@ static const char *colorname[NUMCOLS] = {
9
10 /* treat a cleared input like a wrong password (color) */
11 static const int failonclear = 1;
12 +
13 +static const char *imgpath = "img.xpm";
14 +static const int imgwidth = 1920;
15 +static const int imgheight = 1080;
16 +static const int imgoffsetx = 0;
17 +static const int imgoffsety = 0;
18 +static const int showimgonlyatstart = 1;
19 diff --git a/config.mk b/config.mk
20 index 74429ae..6145285 100644
21 --- a/config.mk
22 +++ b/config.mk
23 @@ -12,7 +12,7 @@ X11LIB = /usr/X11R6/lib
24
25 # includes and libs
26 INCS = -I. -I/usr/include -I${X11INC}
27 -LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr
28 +LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr -lXpm
29
30 # flags
31 CPPFLAGS = -DVERSION=\"${VERSION}\" -D_DEFAULT_SOURCE -DHAVE_SHADOW_H
32 diff --git a/slock.c b/slock.c
33 index 5ae738c..b36c347 100644
34 --- a/slock.c
35 +++ b/slock.c
36 @@ -18,6 +18,7 @@
37 #include <X11/keysym.h>
38 #include <X11/Xlib.h>
39 #include <X11/Xutil.h>
40 +#include <X11/xpm.h>
41
42 #include "arg.h"
43 #include "util.h"
44 @@ -124,6 +125,19 @@ gethash(void)
45 return hash;
46 }
47
48 +static void
49 +showimage(Display *dpy, Window win)
50 +{
51 + XImage *ximage;
52 +
53 + if (!XpmReadFileToImage (dpy, imgpath, &ximage, NULL, NULL)) {
54 + XSelectInput(dpy, win, ButtonPressMask|ExposureMask);
55 + XMapWindow(dpy, win);
56 +
57 + XPutImage(dpy, win, DefaultGC(dpy, 0), ximage, 0, 0, imgoffsetx, imgoffsety, imgwidth, imgheight);
58 + }
59 +}
60 +
61 static void
62 readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
63 const char *hash)
64 @@ -194,6 +208,8 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
65 locks[screen]->win,
66 locks[screen]->colors[color]);
67 XClearWindow(dpy, locks[screen]->win);
68 + if (showimgonlyatstart != 1)
69 + showimage(dpy, locks[screen]->win);
70 }
71 oldc = color;
72 }
73 @@ -256,6 +272,8 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen)
74 &color, &color, 0, 0);
75 XDefineCursor(dpy, lock->win, invisible);
76
77 + showimage(dpy, lock->win);
78 +
79 /* Try to grab mouse pointer *and* keyboard for 600ms, else fail the lock */
80 for (i = 0, ptgrab = kbgrab = -1; i < 6; i++) {
81 if (ptgrab != GrabSuccess) {