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) {