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