commit 854999c37605293e74992cf5970587005795eee6
parent 6a0a770baafe8ba00650a161fe9f647190d6e802
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Thu, 2 Mar 2006 13:37:52 +0100
implemented detach fetching for maxclient>0 columns
Diffstat:
3 files changed, 36 insertions(+), 15 deletions(-)
diff --git a/cmd/wm/area.c b/cmd/wm/area.c
@@ -140,3 +140,37 @@ attach_client2area(Area *a, Client *c)
resize_client(c, &c->frame.rect, nil, False);
}
+void
+detach_client_area(Client *c)
+{
+ Area *a = c->area;
+ Page *p = a->page;
+ int i = area2index(a);
+ cext_array_detach((void **)a->client, c, &a->clientsz);
+ a->nclient--;
+ if(a->sel >= a->nclient)
+ a->sel = 0;
+ if(i) { /* column */
+ if(a->maxclient && (a->nclient < a->maxclient)) {
+ for(++i; i < p->narea; i++) {
+ Area *tmp = p->area[i];
+ if(!tmp->maxclient)
+ sendto_area(a, tmp->client[0]);
+ else
+ continue;
+ if(!tmp->nclient)
+ destroy_area(tmp);
+ arrange_page(p, True);
+ break;
+ }
+ }
+ if(!a->nclient) {
+ if(p->narea > 2) {
+ destroy_area(a);
+ arrange_page(p, True);
+ }
+ }
+ else
+ arrange_column(a);
+ }
+}
diff --git a/cmd/wm/client.c b/cmd/wm/client.c
@@ -380,10 +380,6 @@ detach_client(Client *c, Bool unmap)
if(client[i]->revert == c)
client[i]->revert = nil;
- cext_array_detach((void **)a->client, c, &a->clientsz);
- a->nclient--;
- if(a->sel >= a->nclient)
- a->sel = 0;
if(!c->destroyed) {
if(!unmap)
unmap_client(c);
@@ -392,17 +388,7 @@ detach_client(Client *c, Bool unmap)
reparent_client(c, root, c->rect.x, c->rect.y);
XUnmapWindow(dpy, c->frame.win);
}
- if(area2index(a)) { /* column */
- if(!a->nclient) {
- Page *p = a->page;
- if(p->narea > 2) {
- destroy_area(a);
- arrange_page(p, True);
- }
- }
- else
- arrange_column(a);
- }
+ detach_client_area(c);
}
c->area = nil;
if(c->revert)
diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h
@@ -197,6 +197,7 @@ void update_area_geometry(Area *a);
void select_area(Area *a, char *arg);
void sendto_area(Area *to, Client *c);
void attach_client2area(Area *a, Client *c);
+void detach_client_area(Client *c);
/* bar.c */
Label *new_label();