xresources.c (1407B)
1 void 2 resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst) 3 { 4 char *sdst = NULL; 5 int *idst = NULL; 6 float *fdst = NULL; 7 8 sdst = dst; 9 idst = dst; 10 fdst = dst; 11 12 char fullname[256]; 13 char *type; 14 XrmValue ret; 15 16 snprintf(fullname, sizeof(fullname), "%s.%s", "dwm", name); 17 fullname[sizeof(fullname) - 1] = '\0'; 18 19 XrmGetResource(db, fullname, "*", &type, &ret); 20 if (!(ret.addr == NULL || strncmp("String", type, 64))) 21 { 22 switch (rtype) { 23 case STRING: 24 strcpy(sdst, ret.addr); 25 break; 26 case INTEGER: 27 *idst = strtoul(ret.addr, NULL, 10); 28 break; 29 case FLOAT: 30 *fdst = strtof(ret.addr, NULL); 31 break; 32 } 33 } 34 } 35 36 void 37 load_xresources(void) 38 { 39 Display *display; 40 char *resm; 41 XrmDatabase db; 42 ResourcePref *p; 43 44 display = XOpenDisplay(NULL); 45 resm = XResourceManagerString(display); 46 if (!resm) 47 return; 48 49 db = XrmGetStringDatabase(resm); 50 for (p = resources; p < resources + LENGTH(resources); p++) 51 resource_load(db, p->name, p->type, p->dst); 52 XCloseDisplay(display); 53 } 54 55 void 56 xrdb(const Arg *arg) 57 { 58 int i; 59 load_xresources(); 60 for (i = 0; i < LENGTH(colors); i++) 61 scheme[i] = drw_scm_create(drw, colors[i], 62 #if BAR_ALPHA_PATCH 63 alphas[i], 64 #endif // BAR_ALPHA_PATCH 65 ColCount 66 ); 67 #if BAR_SYSTRAY_PATCH && !BAR_ALPHA_PATCH 68 if (systray) { 69 XMoveWindow(dpy, systray->win, -32000, -32000); 70 } 71 #endif // BAR_SYSTRAY_PATCH 72 arrange(NULL); 73 focus(NULL); 74 }