slock

Kris's build of slock (slock-flexipatch)
git clone git clone https://git.krisyotam.com/krisyotam/slock.git
Log | Files | Refs | README | LICENSE

xresources.c (1089B)


      1 #include <X11/Xresource.h>
      2 #include <math.h>
      3 
      4 int
      5 resource_load(XrmDatabase db, char *name, enum resource_type rtype, void *dst)
      6 {
      7 	char **sdst = dst;
      8 	int *idst = dst;
      9 	float *fdst = dst;
     10 
     11 	char fullname[256];
     12 	char fullclass[256];
     13 	char *type;
     14 	XrmValue ret;
     15 
     16 	snprintf(fullname, sizeof(fullname), "%s.%s", "slock", name);
     17 	snprintf(fullclass, sizeof(fullclass), "%s.%s", "Slock", name);
     18 	fullname[sizeof(fullname) - 1] = fullclass[sizeof(fullclass) - 1] = '\0';
     19 
     20 	XrmGetResource(db, fullname, fullclass, &type, &ret);
     21 	if (ret.addr == NULL || strncmp("String", type, 64))
     22 		return 1;
     23 
     24 	switch (rtype) {
     25 	case STRING:
     26 		*sdst = ret.addr;
     27 		break;
     28 	case INTEGER:
     29 		*idst = strtoul(ret.addr, NULL, 10);
     30 		break;
     31 	case FLOAT:
     32 		*fdst = strtof(ret.addr, NULL);
     33 		break;
     34 	}
     35 	return 0;
     36 }
     37 
     38 void
     39 config_init(Display *dpy)
     40 {
     41 	char *resm;
     42 	XrmDatabase db;
     43 	ResourcePref *p;
     44 
     45 	XrmInitialize();
     46 	resm = XResourceManagerString(dpy);
     47 	if (!resm)
     48 		return;
     49 
     50 	db = XrmGetStringDatabase(resm);
     51 	for (p = resources; p < resources + LENGTH(resources); p++)
     52 		resource_load(db, p->name, p->type, p->dst);
     53 }