wmii

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

commit 4435f8413164f198bc29cd47f24f948a27e031b8
parent c81c95aa6cde93fb9029e0514cfeb36666514c00
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Sun, 19 Feb 2006 15:56:16 +0100

implemented basic new_column handling


Diffstat:
cmd/wm/column.c | 39++++++++++++++++++++-------------------
cmd/wm/fs.c | 4+++-
cmd/wm/wm.h | 2+-
3 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/cmd/wm/column.c b/cmd/wm/column.c @@ -33,20 +33,21 @@ void arrange_page(Page *p, Bool update_colums) { size_t i; + unsigned int width; if(p->narea == 1) return; - if(update_colums) { - unsigned int width = rect.width / (p->narea - 1); - for(i = 1; i < p->narea; i++) { - p->area[i]->rect = rect; - p->area[i]->rect.x = i * width; - p->area[i]->rect.width = width; + width = rect.width / (p->narea - 1); + for(i = 1; i < p->narea; i++) { + Area *a = p->area[i]; + if(update_colums) { + a->rect = rect; + a->rect.x = (i - 1) * width; + a->rect.width = width; } + arrange_column(a); } - for(i = 1; i < p->narea; i++) - arrange_column(p->area[i]); } static void @@ -202,27 +203,27 @@ select_column(Client *c, char *arg) focus_client(col->client[col->sel], True); } -void -new_column(Page *p) +Area * +new_column(Area *old) { + Page *p = old->page; Client *c = sel_client_of_page(p); - Area *col, *old = c ? c->area : nil; + Area *col; - if(!old || old->nclient < 2) - return; + if(!area_to_index(old) || (old->nclient < 2)) + return nil; - col = cext_emallocz(sizeof(Area)); - col->rect = rect; - p->area = (Area **)cext_array_attach((void **)p->area, col, - sizeof(Area *), &p->areasz); - p->sel = p->narea; - p->narea++; + col = alloc_area(p); cext_array_detach((void **)old->client, c, &old->clientsz); + old->nclient--; col->client = (Client **)cext_array_attach((void **)col->client, c, sizeof(Client *), &col->clientsz); + col->nclient++; + c->area = col; arrange_page(p, True); focus_client(c, True); + return col; } /* diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -347,7 +347,9 @@ mkqid(Qid *dir, char *wname, Qid *new, Bool iswalk) new->type = IXP_QTDIR; if(!strncmp(wname, "new", 4)) { if(iswalk) { - Area *a = alloc_area(p); + Area *a = new_column(p->area[p->sel]); + if(!a) + return -1; new->path = mkqpath(Darea, p->id, a->id, 0); } else diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -276,7 +276,7 @@ void arrange_page(Page *p, Bool update_colums); void arrange_column(Area *col); void resize_column(Client *c, XRectangle *r, XPoint *pt); void select_column(Client *c, char *arg); -void new_column(Page *p); +Area *new_column(Area *old); /* wm.c */ void scan_wins();