Introduction
Introduction Statistics Contact Development Disclaimer Help
t proceeded, though we still miss a real Tag struct - dwm - [fork] custo…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 00ca643bd7ccba6efd001cc679525a53a3c75586
parent 0271ac0ed7b422ffac8ff848193deceedb0872da
Author: anselm@anselm1 <unknown>
Date: Wed, 27 Feb 2008 21:50:50 +0000
proceeded, though we still miss a real Tag struct
Diffstat:
M config.def.h | 6 ++++--
M dwm.c | 58 +++++++++++++++++++----------…
2 files changed, 39 insertions(+), 25 deletions(-)
---
diff --git a/config.def.h b/config.def.h
t@@ -12,8 +12,10 @@
#define SELFGCOLOR "#ffffff"
/* tagging */
-const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "www"…
-int initags[LENGTH(tags)] = { [0] = 1 };
+const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "nil", "6", "7", "8",…
+unsigned int vtags[LENGTH(tags)] = { 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 ,…
+Bool initags[LENGTH(tags)] = { [0] = True, [5] = True };
+
Rule rules[] = {
/* class:instance:title substr tags ref isfloating */
{ "Firefox", tags[8], False },
diff --git a/dwm.c b/dwm.c
t@@ -67,10 +67,10 @@ struct Client {
int x, y, w, h;
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int minax, maxax, minay, maxay;
- int *tags;
long flags;
unsigned int border, oldborder;
Bool isbanned, isfixed, isfloating, isurgent;
+ Bool *tags;
Client *next;
Client *prev;
Client *snext;
t@@ -110,8 +110,12 @@ typedef struct {
Bool isfloating;
} Rule;
+typedef struct {
+ const char name[MAXTAGLEN];
+ unsigned int view;
+} Tag;
+
struct View {
- int id;
int x, y, w, h, wax, way, wah, waw;
double mwfact;
Layout *layout;
t@@ -119,6 +123,7 @@ struct View {
};
/* function declarations */
+void addtag(Client *c, const char *t);
void applyrules(Client *c);
void arrange(void);
void attach(Client *c);
t@@ -153,7 +158,7 @@ long getstate(Window w);
Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
void grabbuttons(Client *c, Bool focused);
void grabkeys(void);
-unsigned int idxoftag(const char *tag);
+unsigned int idxoftag(const char *t);
void initfont(const char *fontstr);
Bool isoccupied(unsigned int t);
Bool isprotodel(Client *c);
t@@ -208,8 +213,6 @@ char stext[256], buf[256];
int nviews = 1;
View *selview;
int screen;
-int *seltags;
-int *prevtags;
int (*xerrorxlib)(Display *, XErrorEvent *);
unsigned int bh, bpos;
unsigned int blw = 0;
t@@ -234,6 +237,8 @@ Bool domwfact = True;
Bool dozoom = True;
Bool otherwm, readin;
Bool running = True;
+Bool *prevtags;
+Bool *seltags;
Client *clients = NULL;
Client *sel = NULL;
Client *stack = NULL;
t@@ -248,17 +253,24 @@ Window root;
/* function implementations */
void
+addtag(Client *c, const char *t) {
+ unsigned int i, tidx = idxoftag(t);
+
+ for(i = 0; i < LENGTH(tags); i++)
+ if(c->tags[i] && vtags[i] != vtags[tidx])
+ return; /* conflict */
+ c->tags[tidx] = True;
+}
+
+void
applyrules(Client *c) {
unsigned int i;
- Bool matched_tag = False;
+ Bool matched = False;
Rule *r;
XClassHint ch = { 0 };
/* rule matching */
XGetClassHint(dpy, c->win, &ch);
- snprintf(buf, sizeof buf, "%s:%s:%s",
- ch.res_class ? ch.res_class : "",
- ch.res_name ? ch.res_name : "", c->name);
for(i = 0; i < LENGTH(rules); i++) {
r = &rules[i];
if(strstr(c->name, r->prop)
t@@ -267,8 +279,8 @@ applyrules(Client *c) {
{
c->isfloating = r->isfloating;
if(r->tag) {
- matched_tag = True;
- c->tags[idxoftag(r->tag)] = selview->id;
+ addtag(c, r->tag);
+ matched = True;
}
}
}
t@@ -276,7 +288,7 @@ applyrules(Client *c) {
XFree(ch.res_class);
if(ch.res_name)
XFree(ch.res_name);
- if(!matched_tag)
+ if(!matched)
memcpy(c->tags, seltags, sizeof initags);
}
t@@ -532,7 +544,7 @@ drawbar(View *v) {
for(c = stack; c && (!isvisible(c) || getview(c) != v); c = c->snext);
for(i = 0; i < LENGTH(tags); i++) {
dc.w = textw(tags[i]);
- if(seltags[i] && seltags[i] == v->id) {
+ if(seltags[i]) {
drawtext(v, tags[i], dc.sel, isurgent(i));
drawsquare(v, c && c->tags[i], isoccupied(i), isurgent…
}
t@@ -902,10 +914,10 @@ grabkeys(void) {
}
unsigned int
-idxoftag(const char *tag) {
+idxoftag(const char *t) {
unsigned int i;
- for(i = 0; (i < LENGTH(tags)) && (tags[i] != tag); i++);
+ for(i = 0; (i < LENGTH(tags)) && (tags[i] != t); i++);
return (i < LENGTH(tags)) ? i : 0;
}
t@@ -1559,7 +1571,6 @@ nviews = 2; /* aim Xinerama */
for(i = 0; i < nviews; i++) {
/* init geometry */
v = &views[i];
- v->id = i + 1;
if(nviews != 1 && isxinerama) {
t@@ -1653,8 +1664,8 @@ tag(const char *arg) {
if(!sel)
return;
for(i = 0; i < LENGTH(tags); i++)
- sel->tags[i] = (NULL == arg) ? selview->id : 0;
- sel->tags[idxoftag(arg)] = selview->id;
+ sel->tags[i] = (NULL == arg);
+ sel->tags[idxoftag(arg)] = True;
arrange();
}
t@@ -1750,7 +1761,7 @@ toggletag(const char *arg) {
sel->tags[i] = !sel->tags[i];
for(j = 0; j < LENGTH(tags) && !sel->tags[j]; j++);
if(j == LENGTH(tags))
- sel->tags[i] = selview->id; /* at least one tag must be enable…
+ sel->tags[i] = True; /* at least one tag must be enabled */
arrange();
}
t@@ -1762,7 +1773,7 @@ toggleview(const char *arg) {
seltags[i] = !seltags[i];
for(j = 0; j < LENGTH(tags) && !seltags[j]; j++);
if(j == LENGTH(tags))
- seltags[i] = selview->id; /* at least one tag must be viewed */
+ seltags[i] = True; /* at least one tag must be viewed */
arrange();
}
t@@ -1903,11 +1914,12 @@ updatewmhints(Client *c) {
void
view(const char *arg) {
unsigned int i;
- int tmp[LENGTH(tags)];
+ Bool tmp[LENGTH(tags)];
for(i = 0; i < LENGTH(tags); i++)
- tmp[i] = (NULL == arg) ? selview->id : 0;
- tmp[idxoftag(arg)] = selview->id;
+ tmp[i] = (NULL == arg);
+ tmp[idxoftag(arg)] = True;
+
if(memcmp(seltags, tmp, sizeof initags) != 0) {
memcpy(prevtags, seltags, sizeof initags);
memcpy(seltags, tmp, sizeof initags);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.