63 return False; |
66 return False; |
64 } |
67 } |
65 |
68 |
66 void |
69 void |
67 settags(Client *c, Client *trans) { |
70 settags(Client *c, Client *trans) { |
68 char prop[512]; |
|
69 unsigned int i, j; |
71 unsigned int i, j; |
70 regmatch_t tmp; |
72 regmatch_t tmp; |
71 Bool matched = trans != NULL; |
73 Bool matched = trans != NULL; |
72 XClassHint ch = { 0 }; |
74 XClassHint ch = { 0 }; |
|
75 XTextProperty name; |
73 |
76 |
74 if(matched) |
77 if(matched) { |
75 for(i = 0; i < ntags; i++) |
78 for(i = 0; i < ntags; i++) |
76 c->tags[i] = trans->tags[i]; |
79 c->tags[i] = trans->tags[i]; |
|
80 return; |
|
81 } |
77 else { |
82 else { |
|
83 /* check if window has set a property */ |
|
84 name.nitems = 0; |
|
85 XGetTextProperty(dpy, c->win, &name, dwmtags); |
|
86 if(name.nitems && name.encoding == XA_STRING) { |
|
87 strncpy(prop, (char *)name.value, sizeof prop - 1); |
|
88 prop[sizeof prop - 1] = '\0'; |
|
89 XFree(name.value); |
|
90 for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++) |
|
91 if((c->tags[i] = prop[i] == '+')) |
|
92 matched = True; |
|
93 } |
|
94 if(matched) |
|
95 return; |
|
96 /* rule matching */ |
78 XGetClassHint(dpy, c->win, &ch); |
97 XGetClassHint(dpy, c->win, &ch); |
79 snprintf(prop, sizeof prop, "%s:%s:%s", |
98 snprintf(prop, sizeof prop, "%s:%s:%s", |
80 ch.res_class ? ch.res_class : "", |
99 ch.res_class ? ch.res_class : "", |
81 ch.res_name ? ch.res_name : "", c->name); |
100 ch.res_name ? ch.res_name : "", c->name); |
82 for(i = 0; i < nrules; i++) |
101 for(i = 0; i < nrules; i++) |
108 for(i = 0; i < ntags; i++) |
127 for(i = 0; i < ntags; i++) |
109 sel->tags[i] = arg == NULL; |
128 sel->tags[i] = arg == NULL; |
110 i = arg ? atoi(arg) : 0; |
129 i = arg ? atoi(arg) : 0; |
111 if(i >= 0 && i < ntags) |
130 if(i >= 0 && i < ntags) |
112 sel->tags[i] = True; |
131 sel->tags[i] = True; |
|
132 if(sel) { |
|
133 for(i = 0; i < ntags && i < sizeof prop - 1; i++) |
|
134 prop[i] = sel->tags[i] ? '+' : '-'; |
|
135 prop[i] = '\0'; |
|
136 XChangeProperty(dpy, sel->win, dwmtags, XA_STRING, 8, PropModeReplace, (unsigned char *)prop, i); |
|
137 } |
113 arrange(); |
138 arrange(); |
114 } |
139 } |
115 |
140 |
116 void |
141 void |
117 toggletag(const char *arg) { |
142 toggletag(const char *arg) { |