slock with DPMS and other tweaks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

resize lockscreen window after Xrandr resize

+17 -3
+1 -1
config.mk
··· 11 11 12 12 # includes and libs 13 13 INCS = -I. -I/usr/include -I${X11INC} 14 - LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext 14 + LIBS = -L/usr/lib -lc -lcrypt -L${X11LIB} -lX11 -lXext -lXrandr 15 15 16 16 # flags 17 17 CPPFLAGS = -DVERSION=\"${VERSION}\" -DHAVE_SHADOW_H
+16 -2
slock.c
··· 13 13 #include <string.h> 14 14 #include <unistd.h> 15 15 #include <sys/types.h> 16 + #include <X11/extensions/Xrandr.h> 16 17 #include <X11/keysym.h> 17 18 #include <X11/Xlib.h> 18 19 #include <X11/Xutil.h> ··· 41 42 static Lock **locks; 42 43 static int nscreens; 43 44 static Bool running = True; 45 + static Bool rr; 46 + static int rrevbase; 47 + static int rrerrbase; 44 48 45 49 static void 46 50 die(const char *errstr, ...) ··· 179 183 } 180 184 } 181 185 llen = len; 182 - } 183 - else for (screen = 0; screen < nscreens; screen++) 186 + } else if (rr && ev.type == rrevbase + RRScreenChangeNotify) { 187 + XRRScreenChangeNotifyEvent *rre = (XRRScreenChangeNotifyEvent*)&ev; 188 + for (screen = 0; screen < nscreens; screen++) { 189 + if (locks[screen]->win == rre->window) { 190 + XResizeWindow(dpy, locks[screen]->win, rre->width, rre->height); 191 + XClearWindow(dpy, locks[screen]->win); 192 + } 193 + } 194 + } else for (screen = 0; screen < nscreens; screen++) 184 195 XRaiseWindow(dpy, locks[screen]->win); 185 196 } 186 197 } ··· 236 247 invisible = XCreatePixmapCursor(dpy, lock->pmap, lock->pmap, &color, &color, 0, 0); 237 248 XDefineCursor(dpy, lock->win, invisible); 238 249 XMapRaised(dpy, lock->win); 250 + if (rr) 251 + XRRSelectInput(dpy, lock->win, RRScreenChangeNotifyMask); 239 252 for (len = 1000; len; len--) { 240 253 if (XGrabPointer(dpy, lock->root, False, ButtonPressMask | ButtonReleaseMask | PointerMotionMask, 241 254 GrabModeAsync, GrabModeAsync, None, invisible, CurrentTime) == GrabSuccess) ··· 295 308 296 309 if (!(dpy = XOpenDisplay(0))) 297 310 die("slock: cannot open display\n"); 311 + rr = XRRQueryExtension(dpy, &rrevbase, &rrerrbase); 298 312 /* Get the number of screens in display "dpy" and blank them all. */ 299 313 nscreens = ScreenCount(dpy); 300 314 locks = malloc(sizeof(Lock *) * nscreens);