summaryrefslogtreecommitdiff
path: root/dwm/patch/xresources.c
diff options
context:
space:
mode:
authorcoasteen <coasteen@proton.me>2026-07-09 10:42:28 +0330
committercoasteen <coasteen@proton.me>2026-07-09 10:42:28 +0330
commit8cbadb61604667b407b53ee1258433994fa4765a (patch)
tree97765fb29418fd6278fcb4cbb9760893afaf7a58 /dwm/patch/xresources.c
Diffstat (limited to 'dwm/patch/xresources.c')
-rwxr-xr-xdwm/patch/xresources.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/dwm/patch/xresources.c b/dwm/patch/xresources.c
new file mode 100755
index 0000000..1e8eab5
--- /dev/null
+++ b/dwm/patch/xresources.c
@@ -0,0 +1,74 @@
+void
+resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
+{
+ char *sdst = NULL;
+ int *idst = NULL;
+ float *fdst = NULL;
+
+ sdst = dst;
+ idst = dst;
+ fdst = dst;
+
+ char fullname[256];
+ char *type;
+ XrmValue ret;
+
+ snprintf(fullname, sizeof(fullname), "%s.%s", "dwm", name);
+ fullname[sizeof(fullname) - 1] = '\0';
+
+ XrmGetResource(db, fullname, "*", &type, &ret);
+ if (!(ret.addr == NULL || strncmp("String", type, 64)))
+ {
+ switch (rtype) {
+ case STRING:
+ strcpy(sdst, ret.addr);
+ break;
+ case INTEGER:
+ *idst = strtoul(ret.addr, NULL, 10);
+ break;
+ case FLOAT:
+ *fdst = strtof(ret.addr, NULL);
+ break;
+ }
+ }
+}
+
+void
+load_xresources(void)
+{
+ Display *display;
+ char *resm;
+ XrmDatabase db;
+ ResourcePref *p;
+
+ display = XOpenDisplay(NULL);
+ resm = XResourceManagerString(display);
+ if (!resm)
+ return;
+
+ db = XrmGetStringDatabase(resm);
+ for (p = resources; p < resources + LENGTH(resources); p++)
+ resource_load(db, p->name, p->type, p->dst);
+ XCloseDisplay(display);
+}
+
+void
+xrdb(const Arg *arg)
+{
+ int i;
+ load_xresources();
+ for (i = 0; i < LENGTH(colors); i++)
+ scheme[i] = drw_scm_create(drw, colors[i],
+ #if BAR_ALPHA_PATCH
+ alphas[i],
+ #endif // BAR_ALPHA_PATCH
+ ColCount
+ );
+ #if BAR_SYSTRAY_PATCH && !BAR_ALPHA_PATCH
+ if (systray) {
+ XMoveWindow(dpy, systray->win, -32000, -32000);
+ }
+ #endif // BAR_SYSTRAY_PATCH
+ arrange(NULL);
+ focus(NULL);
+}