commit 53b9c7b33f71351316588d6207c3baf54eac0be8
parent c087c64dd2a3c600be882de415e457a6eb7620f6
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Mon, 10 Apr 2006 17:50:39 +0200
rearranged
Diffstat:
5 files changed, 59 insertions(+), 8 deletions(-)
diff --git a/cmd/wm/Makefile b/cmd/wm/Makefile
@@ -9,7 +9,7 @@ LDFLAGS += -L../../liblitz -llitz -L../../libixp -lixp -L../../libcext -lcext -
# Solaris
# LDFLAGS += -lsocket
-SRC = area.c bar.c fs.c frame.c wm.c kb.c client.c event.c mouse.c rule.c tag.c view.c
+SRC = area.c bar.c fs.c frame.c wm.c kb.c client.c event.c mouse.c rule.c view.c
OBJ = ${SRC:.c=.o}
all: wmiiwm
diff --git a/cmd/wm/client.c b/cmd/wm/client.c
@@ -336,7 +336,7 @@ manage_client(Client *c)
match_tags(c, True);
reparent_client(c, c->framewin, c->rect.x, c->rect.y);
- update_tags(c);
+ update_views(c);
}
static int
@@ -367,7 +367,7 @@ destroy_client(Client *c)
XFreeGC(dpy, c->gc);
XDestroyWindow(dpy, c->framewin);
cext_vdetach(client2vector(&client), c);
- update_tags(nil);
+ update_views(nil);
free(c);
XSync(dpy, False);
diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c
@@ -1210,7 +1210,7 @@ xwrite(IXPConn *c, Fcall *fcall)
else
cl = client.data[i1];
cext_strlcpy(cl->tags, buf, sizeof(cl->tags));
- update_tags(cl);
+ update_views(cl);
draw_client(cl);
break;
case FsFgeom:
diff --git a/cmd/wm/view.c b/cmd/wm/view.c
@@ -292,3 +292,56 @@ arrange_view(View *v, Bool dirty)
arrange_column(a, False);
}
}
+
+void
+update_views(Client *c)
+{
+ unsigned int i;
+
+ if(c) {
+ char buf[256];
+ char *toks[16];
+ unsigned int j, n;
+ Bool match;
+
+ fprintf(stderr, "tags: %s\n", c->tags);
+ cext_strlcpy(buf, c->tags, sizeof(buf));
+ n = cext_tokenize(toks, 16, buf, '+');
+
+ for(i = 0; i < n; i++) {
+ View *v = get_view(toks[i]);
+ if(!clientofview(v, c))
+ attach_toview(v, c);
+ }
+
+ for(i = 0; i < c->view.size; i++) {
+ View *v = c->view.data[i];
+ match = False;
+ for(j = 0; j < n; j++) {
+ if(!strncmp(v->name, toks[j], sizeof(v->name)))
+ match = True;
+ }
+ if(!match)
+ detach_fromview(v, c);
+ }
+ }
+
+ for(i = 0; i < view.size; i++)
+ if(!hasclient(view.data[i]))
+ destroy_view(view.data[i]);
+
+ if(view.size)
+ focus_view(view.data[sel]);
+ else
+ update_bar_tags();
+}
+
+void
+retag()
+{
+ unsigned int i;
+ for(i = 0; i < client.size; i++) {
+ match_tags(client.data[i], False);
+ update_views(client.data[i]);
+ }
+}
diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h
@@ -261,10 +261,6 @@ void ungrab_mouse(Window w, unsigned long mod, unsigned int button);
void update_rules();
void match_tags(Client *c, Bool newclient);
-/* tag.c */
-void update_tags(Client *c);
-void retag();
-
/* view.c */
Vector *view2vector(ViewVector *vv);
void arrange_view(View *v, Bool dirty);
@@ -283,6 +279,8 @@ Bool hasclient(View *v);
View *name2view(char *name);
void destroy_view(View *v);
View *get_view(char *name);
+void update_views(Client *c);
+void retag();
/* wm.c */
void scan_wins();