wmii

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

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:
cmd/wm/area.c | 34++++++++++++++++++++++++++++++++++
cmd/wm/client.c | 16+---------------
cmd/wm/wm.h | 1+
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();