diff options
author | davidpkj <davidpenkow1@gmail.com> | 2022-05-28 22:10:09 +0200 |
---|---|---|
committer | davidpkj <davidpenkow1@gmail.com> | 2023-08-27 20:54:02 +0200 |
commit | 780ec9d1e4e450df2a24cbc517a5462257f5eefe (patch) | |
tree | d7965547dc14c47b41b996b504426c3c698f3569 /slock.c | |
parent | 8c5a66db15f76c0fe156d4b2fc7c00f636092f20 (diff) |
slock now colored
Diffstat (limited to 'slock.c')
-rw-r--r-- | slock.c | 68 |
1 files changed, 68 insertions, 0 deletions
@@ -7,6 +7,7 @@ #include <ctype.h> #include <errno.h> +#include <math.h> #include <grp.h> #include <pwd.h> #include <stdarg.h> @@ -24,6 +25,7 @@ #include <X11/Xlib.h> #include <X11/Xutil.h> #include <X11/Xft/Xft.h> +#include <X11/Xresource.h> #include <Imlib2.h> #include "arg.h" @@ -40,6 +42,19 @@ enum { NUMCOLS }; +/* Xresources preferences */ +enum resource_type { + STRING = 0, + INTEGER = 1, + FLOAT = 2 +}; + +typedef struct { + char *name; + enum resource_type type; + void *dst; +} ResourcePref; + #include "config.h" struct lock { @@ -379,6 +394,57 @@ lockscreen(Display *dpy, struct xrandr *rr, int screen) return NULL; } +int +resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst) +{ + char **sdst = dst; + int *idst = dst; + float *fdst = dst; + + char fullname[256]; + char fullclass[256]; + char *type; + XrmValue ret; + + snprintf(fullname, sizeof(fullname), "%s.%s", "slock", name); + snprintf(fullclass, sizeof(fullclass), "%s.%s", "Slock", name); + fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0'; + + XrmGetResource(db, fullname, fullclass, &type, &ret); + if (ret.addr == NULL || strncmp("String", type, 64)) + return 1; + + switch (rtype) { + case STRING: + *sdst = ret.addr; + break; + case INTEGER: + *idst = strtoul(ret.addr, NULL, 10); + break; + case FLOAT: + *fdst = strtof(ret.addr, NULL); + break; + } + return 0; +} + +void +config_init(Display *dpy) +{ + char *resm; + XrmDatabase db; + ResourcePref *p; + + XrmInitialize(); + resm = XResourceManagerString(dpy); + if (!resm) + return; + + db = XrmGetStringDatabase(resm); + for (p = resources; p < resources + LEN(resources); p++) + resource_load(db, p->name, p->type, p->dst); +} + static void usage(void) { @@ -437,6 +503,8 @@ main(int argc, char **argv) { if (setuid(duid) < 0) die("slock: setuid: %s\n", strerror(errno)); + config_init(dpy); + /*Create screenshot Image*/ Screen *scr = ScreenOfDisplay(dpy, DefaultScreen(dpy)); image = imlib_create_image(scr->width,scr->height); |