spmenu/libs/xrdb.c

52 lines
1.3 KiB
C
Raw Normal View History

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", "spmenu", name);
fullname[sizeof(fullname) - 1] = '\0';
XrmGetResource(db, fullname, "*", &type, &ret);
if (!xresources) return;
2023-03-31 12:42:15 +02:00
if (!(ret.addr == NULL || strncmp("String", type, 64))) {
switch (rtype) { // type
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 || !xresources)
return;
db = XrmGetStringDatabase(resm);
2023-03-30 19:06:04 +02:00
for (p = resources; p < resources + LENGTH(resources); p++)
resource_load(db, p->name, p->type, p->dst);
2023-03-30 19:06:04 +02:00
// recognize global colors
if (globalcolors) {
for (p = cols; p < cols + LENGTH(cols); p++)
resource_load(db, p->name, p->type, p->dst);
}
XCloseDisplay(display);
}