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); }