|
@ -232,10 +232,9 @@ Regs *regs = NULL; |
|
|
/* configuration, allows nested code to access above variables */ |
|
|
/* configuration, allows nested code to access above variables */ |
|
|
#include "config.h" |
|
|
#include "config.h" |
|
|
|
|
|
|
|
|
/* statically define the number of tags. */ |
|
|
|
|
|
unsigned int ntags = sizeof tags / sizeof tags[0]; |
|
|
|
|
|
Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True}; |
|
|
|
|
|
Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True}; |
|
|
|
|
|
|
|
|
#define NTAGS (sizeof tags / sizeof tags[0]) |
|
|
|
|
|
Bool seltags[NTAGS] = {[0] = True}; |
|
|
|
|
|
Bool prevtags[NTAGS] = {[0] = True}; |
|
|
|
|
|
|
|
|
/* function implementations */ |
|
|
/* function implementations */ |
|
|
void |
|
|
void |
|
@ -254,7 +253,7 @@ applyrules(Client *c) { |
|
|
for(i = 0; i < nrules; i++) |
|
|
for(i = 0; i < nrules; i++) |
|
|
if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) { |
|
|
if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) { |
|
|
c->isfloating = rules[i].isfloating; |
|
|
c->isfloating = rules[i].isfloating; |
|
|
for(j = 0; regs[i].tagregex && j < ntags; j++) { |
|
|
|
|
|
|
|
|
for(j = 0; regs[i].tagregex && j < NTAGS; j++) { |
|
|
if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { |
|
|
if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { |
|
|
matched = True; |
|
|
matched = True; |
|
|
c->tags[j] = True; |
|
|
c->tags[j] = True; |
|
@ -313,7 +312,7 @@ buttonpress(XEvent *e) { |
|
|
|
|
|
|
|
|
if(barwin == ev->window) { |
|
|
if(barwin == ev->window) { |
|
|
x = 0; |
|
|
x = 0; |
|
|
for(i = 0; i < ntags; i++) { |
|
|
|
|
|
|
|
|
for(i = 0; i < NTAGS; i++) { |
|
|
x += textw(tags[i]); |
|
|
x += textw(tags[i]); |
|
|
if(ev->x < x) { |
|
|
if(ev->x < x) { |
|
|
if(ev->button == Button1) { |
|
|
if(ev->button == Button1) { |
|
@ -537,7 +536,7 @@ drawbar(void) { |
|
|
int i, x; |
|
|
int i, x; |
|
|
|
|
|
|
|
|
dc.x = dc.y = 0; |
|
|
dc.x = dc.y = 0; |
|
|
for(i = 0; i < ntags; i++) { |
|
|
|
|
|
|
|
|
for(i = 0; i < NTAGS; i++) { |
|
|
dc.w = textw(tags[i]); |
|
|
dc.w = textw(tags[i]); |
|
|
if(seltags[i]) { |
|
|
if(seltags[i]) { |
|
|
drawtext(tags[i], dc.sel); |
|
|
drawtext(tags[i], dc.sel); |
|
@ -847,10 +846,8 @@ unsigned int |
|
|
idxoftag(const char *tag) { |
|
|
idxoftag(const char *tag) { |
|
|
unsigned int i; |
|
|
unsigned int i; |
|
|
|
|
|
|
|
|
for(i = 0; i < ntags; i++) |
|
|
|
|
|
if(tags[i] == tag) |
|
|
|
|
|
return i; |
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
for(i = 0; (i < NTAGS) && (tags[i] != tag); i++); |
|
|
|
|
|
return (i < NTAGS) ? i : 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
void |
|
@ -930,7 +927,7 @@ Bool |
|
|
isvisible(Client *c) { |
|
|
isvisible(Client *c) { |
|
|
unsigned int i; |
|
|
unsigned int i; |
|
|
|
|
|
|
|
|
for(i = 0; i < ntags; i++) |
|
|
|
|
|
|
|
|
for(i = 0; i < NTAGS; i++) |
|
|
if(c->tags[i] && seltags[i]) |
|
|
if(c->tags[i] && seltags[i]) |
|
|
return True; |
|
|
return True; |
|
|
return False; |
|
|
return False; |
|
@ -1140,7 +1137,7 @@ propertynotify(XEvent *e) { |
|
|
default: break; |
|
|
default: break; |
|
|
case XA_WM_TRANSIENT_FOR: |
|
|
case XA_WM_TRANSIENT_FOR: |
|
|
XGetTransientForHint(dpy, c->win, &trans); |
|
|
XGetTransientForHint(dpy, c->win, &trans); |
|
|
if(!c->isfloating && (c->isfloating = (getclient(trans) != NULL))) |
|
|
|
|
|
|
|
|
if(!c->isfloating && (c->isfloating = (NULL != getclient(trans)))) |
|
|
arrange(); |
|
|
arrange(); |
|
|
break; |
|
|
break; |
|
|
case XA_WM_NORMAL_HINTS: |
|
|
case XA_WM_NORMAL_HINTS: |
|
@ -1542,11 +1539,9 @@ tag(const char *arg) { |
|
|
|
|
|
|
|
|
if(!sel) |
|
|
if(!sel) |
|
|
return; |
|
|
return; |
|
|
for(i = 0; i < ntags; i++) |
|
|
|
|
|
sel->tags[i] = arg == NULL; |
|
|
|
|
|
i = idxoftag(arg); |
|
|
|
|
|
if(i >= 0 && i < ntags) |
|
|
|
|
|
sel->tags[i] = True; |
|
|
|
|
|
|
|
|
for(i = 0; i < NTAGS; i++) |
|
|
|
|
|
sel->tags[i] = (NULL == arg); |
|
|
|
|
|
sel->tags[idxoftag(arg)] = True; |
|
|
arrange(); |
|
|
arrange(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -1662,9 +1657,9 @@ toggletag(const char *arg) { |
|
|
return; |
|
|
return; |
|
|
i = idxoftag(arg); |
|
|
i = idxoftag(arg); |
|
|
sel->tags[i] = !sel->tags[i]; |
|
|
sel->tags[i] = !sel->tags[i]; |
|
|
for(j = 0; j < ntags && !sel->tags[j]; j++); |
|
|
|
|
|
if(j == ntags) |
|
|
|
|
|
sel->tags[i] = True; |
|
|
|
|
|
|
|
|
for(j = 0; j < NTAGS && !sel->tags[j]; j++); |
|
|
|
|
|
if(j == NTAGS) |
|
|
|
|
|
sel->tags[i] = True; /* at least one tag must be enabled */ |
|
|
arrange(); |
|
|
arrange(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -1674,8 +1669,8 @@ toggleview(const char *arg) { |
|
|
|
|
|
|
|
|
i = idxoftag(arg); |
|
|
i = idxoftag(arg); |
|
|
seltags[i] = !seltags[i]; |
|
|
seltags[i] = !seltags[i]; |
|
|
for(j = 0; j < ntags && !seltags[j]; j++); |
|
|
|
|
|
if(j == ntags) |
|
|
|
|
|
|
|
|
for(j = 0; j < NTAGS && !seltags[j]; j++); |
|
|
|
|
|
if(j == NTAGS) |
|
|
seltags[i] = True; /* at least one tag must be viewed */ |
|
|
seltags[i] = True; /* at least one tag must be viewed */ |
|
|
arrange(); |
|
|
arrange(); |
|
|
} |
|
|
} |
|
@ -1841,11 +1836,9 @@ view(const char *arg) { |
|
|
unsigned int i; |
|
|
unsigned int i; |
|
|
|
|
|
|
|
|
memcpy(prevtags, seltags, sizeof seltags); |
|
|
memcpy(prevtags, seltags, sizeof seltags); |
|
|
for(i = 0; i < ntags; i++) |
|
|
|
|
|
|
|
|
for(i = 0; i < NTAGS; i++) |
|
|
seltags[i] = arg == NULL; |
|
|
seltags[i] = arg == NULL; |
|
|
i = idxoftag(arg); |
|
|
|
|
|
if(i >= 0 && i < ntags) |
|
|
|
|
|
seltags[i] = True; |
|
|
|
|
|
|
|
|
seltags[idxoftag(arg)] = True; |
|
|
arrange(); |
|
|
arrange(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|