sizehints_ruled.c (1045B)
1 void 2 checkfloatingrules(Client *c) 3 { 4 const char *class, *instance; 5 Atom wintype; 6 #if WINDOWROLERULE_PATCH 7 char role[64]; 8 #endif // WINDOWROLERULE_PATCH 9 unsigned int i; 10 const Rule *r; 11 XClassHint ch = { NULL, NULL }; 12 13 XGetClassHint(dpy, c->win, &ch); 14 class = ch.res_class ? ch.res_class : broken; 15 instance = ch.res_name ? ch.res_name : broken; 16 wintype = getatomprop(c, netatom[NetWMWindowType], XA_ATOM); 17 #if WINDOWROLERULE_PATCH 18 gettextprop(c->win, wmatom[WMWindowRole], role, sizeof(role)); 19 #endif // WINDOWROLERULE_PATCH 20 21 for (i = 0; i < LENGTH(rules); i++) { 22 r = &rules[i]; 23 if ((!r->title || strstr(c->name, r->title)) 24 && (!r->class || strstr(class, r->class)) 25 #if WINDOWROLERULE_PATCH 26 && (!r->role || strstr(role, r->role)) 27 #endif // WINDOWROLERULE_PATCH 28 && (!r->instance || strstr(instance, r->instance)) 29 && (!r->wintype || wintype == XInternAtom(dpy, r->wintype, False))) 30 { 31 c->isfloating = r->isfloating; 32 } 33 } 34 if (ch.res_class) 35 XFree(ch.res_class); 36 if (ch.res_name) 37 XFree(ch.res_name); 38 } 39