-
- if(!len) {
- c->tags[tsel] = tags[tsel];
- return;
- }
-
- if(XGetClassHint(dpy, c->win, &ch)) {
- if(ch.res_class && ch.res_name) {
- for(i = 0; i < len; i++)
- if(!strncmp(rule[i].class, ch.res_class, sizeof(rule[i].class))
- && !strncmp(rule[i].instance, ch.res_name, sizeof(rule[i].instance)))
- {
- for(j = 0; j < TLast; j++)
- c->tags[j] = rule[i].tags[j];
- c->dofloat = rule[i].dofloat;
+ XClassHint ch = { 0 };
+
+ /* rule matching */
+ XGetClassHint(dpy, c->win, &ch);
+ snprintf(prop, sizeof prop, "%s:%s:%s",
+ ch.res_class ? ch.res_class : "",
+ ch.res_name ? ch.res_name : "", c->name);
+ for(i = 0; i < nrules; i++)
+ if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) {
+ c->isfloating = rules[i].isfloating;
+ for(j = 0; regs[i].tagregex && j < ntags; j++) {
+ if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {