wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit dec16283d1f06cd1d5248e65a862349cad4401a8
parent 0309ac76c416c45ad74e18afbaf2270585cd6ca9
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Wed,  8 Mar 2006 22:41:45 +0100

enabling tag inheritance from /class/class:instance definition


Diffstat:
cmd/wm/area.c | 16++++++----------
cmd/wm/client.c | 20++++----------------
cmd/wm/tag.c | 14++++++++++++--
cmd/wm/wm.h | 2+-
4 files changed, 23 insertions(+), 29 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -40,12 +40,8 @@ destroy_area(Area *a) free(a->frame); cext_array_detach((void **)t->area, a, &t->areasz); t->narea--; - if(t->sel == t->narea) { - if(t->narea) - t->sel = t->narea - 1; - else - t->sel = 0; - } + if(t->sel > 0) + t->sel--; free(a); } @@ -155,11 +151,11 @@ detach_fromarea(Area *a, Client *c) cext_array_detach((void **)a->frame, f, &a->framesz); free(f); c->nframe--; + if(c->sel > 0) + c->sel--; a->nframe--; - if(c->sel >= c->nframe) - c->sel = 0; - if(a->sel >= a->nframe) - a->sel = 0; + if(a->sel > 0) + a->sel--; if(a->nframe) arrange_area(a); else { diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -330,14 +330,12 @@ gravitate(Client *c, Bool invert) void attach_client(Client *c) { - Tag *t; + TClass *tc = client2class(c); + if(!ntag) - t = alloc_tag(def.tag); - else - t = tag[sel]; + alloc_tag(def.tag); - attach_totag(t, c); - focus_client(c); + cext_strlcpy(c->tags, tc ? tc->tags : def.tag, sizeof(c->tags)); update_ctags(); } @@ -361,16 +359,6 @@ detach_client(Client *c, Bool unmap) } Client * -sel_client_of_tag(Tag *t) -{ - if(t) { - Area *a = t->narea ? t->area[t->sel] : nil; - return (a && a->nframe) ? a->frame[a->sel]->client : nil; - } - return nil; -} - -Client * sel_client() { return ntag ? sel_client_of_tag(tag[sel]) : nil; diff --git a/cmd/wm/tag.c b/cmd/wm/tag.c @@ -263,10 +263,20 @@ attach_totag(Tag *t, Client *c) { Area *a = t->area[t->sel]; - if(c->tags[0] == 0) - cext_strlcat(c->tags, t->name, sizeof(c->tags)); reparent_client(c, c->framewin, c->rect.x, c->rect.y); attach_toarea(a, c); map_client(c); XMapWindow(dpy, c->framewin); + if(t == tag[sel]) + focus_client(c); +} + +Client * +sel_client_of_tag(Tag *t) +{ + if(t) { + Area *a = t->narea ? t->area[t->sel] : nil; + return (a && a->nframe) ? a->frame[a->sel]->client : nil; + } + return nil; } diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -261,7 +261,6 @@ void reparent_client(Client *c, Window w, int x, int y); void attach_client(Client *c); void detach_client(Client *c, Bool unmap); Client *sel_client(); -Client *sel_client_of_tag(Tag *t); void focus_client(Client *c); void resize_client(Client *c, XRectangle *r, XPoint *pt, Bool ignore_xcall); void select_client(Client *c, char *arg); @@ -319,6 +318,7 @@ void update_ctags(); Bool clientoftag(Tag *t, Client *c); void detach_fromtag(Tag *t, Client *c, Bool unmap); void attach_totag(Tag *t, Client *c); +Client *sel_client_of_tag(Tag *t); /* wm.c */ void scan_wins();