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:
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();