wmii

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

commit 53c50eb697901c5e5ef752870e7c9ba1273bd15b
parent 4a59f072daea51f2271fb1238aa59870e90b27e9
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri, 24 Feb 2006 10:06:02 +0100

fixed drop_moving, removed swap crap from column.c


Diffstat:
cmd/wm/area.c | 19+++++++++++++++++++
cmd/wm/client.c | 13+------------
cmd/wm/column.c | 87++++++++++++++-----------------------------------------------------------------
cmd/wm/wm.h | 1+
4 files changed, 36 insertions(+), 84 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -95,3 +95,22 @@ select_area(Area *a, char *arg) else p->sel = i; } + +void +sendto_area(Area *new, Client *c) +{ + Area *a = c->area; + + cext_array_detach((void **)a->client, c, &a->clientsz); + a->nclient--; + if(a->sel >= a->nclient) + a->sel = 0; + + new->client = (Client **)cext_array_attach( + (void **)new->client, c, sizeof(Client *), &new->clientsz); + new->nclient++; + c->area = new; + arrange_column(a); + arrange_column(new); + focus_client(c, True); +} diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -633,16 +633,5 @@ sendtoarea_client(Client *c, char *arg) { new = p->area[i - 1]; } - cext_array_detach((void **)a->client, c, &a->clientsz); - a->nclient--; - if(a->sel >= a->nclient) - a->sel = 0; - - new->client = (Client **)cext_array_attach( - (void **)new->client, c, sizeof(Client *), &new->clientsz); - new->nclient++; - c->area = new; - arrange_column(a); - arrange_column(new); - focus_client(c, True); + sendto_area(new, c); } diff --git a/cmd/wm/column.c b/cmd/wm/column.c @@ -55,7 +55,7 @@ match_horiz(Area *col, XRectangle *r) { size_t i; - for(i = 0; (i < col->clientsz) && col->client[i]; i++) { + for(i = 0; i < col->nclient; i++) { Client *c = col->client[i]; c->frame.rect.x = r->x; c->frame.rect.width = r->width; @@ -73,11 +73,11 @@ drop_resize(Client *c, XRectangle *new) for(i = 0; (i < p->narea) && (p->area[i] != col); i++); west = i ? p->area[i - 1] : nil; - east = (i < p->areasz) && p->area[i + 1] ? p->area[i + 1] : nil; + east = i + 1 < p->narea ? p->area[i + 1] : nil; - for(i = 0; (i < col->clientsz) && col->client[i] && (col->client[i] != c); i++); + for(i = 0; (i < col->nclient) && (col->client[i] != c); i++); north = i ? col->client[i - 1] : nil; - south = (i < col->clientsz) && col->client[i + 1] ? col->client[i + 1] : nil; + south = i + 1 < col->nclient ? col->client[i + 1] : nil; /* horizontal resize */ if(west && (new->x != c->frame.rect.x)) { @@ -121,29 +121,22 @@ drop_moving(Client *c, XRectangle *new, XPoint * pt) Page *p = src->page; size_t i; - if(!pt) + if(!pt || src->nclient < 2) return; - for(i = 0; (i < p->areasz) && p->area[i] && + for(i = 1; (i < p->narea) && !blitz_ispointinrect(pt->x, pt->y, &p->area[i]->rect); i++); - tgt = (i < p->areasz) ? p->area[i] : nil; - if(tgt) { - if(tgt != src) { - if(src->clientsz <= 1 || !src->client[1]) - return; - cext_array_detach((void **)src->client, c, &src->clientsz); - tgt->client = (Client **)cext_array_attach((void **)tgt->client, c, - sizeof(Client *), &tgt->clientsz); - arrange_column(src); - arrange_column(tgt); - } else { - for(i = 0; (i < src->clientsz) && src->client[i] && + if((tgt = ((i < p->narea) ? p->area[i] : nil))) { + if(tgt != src) + sendto_area(tgt, c); + else { + for(i = 0; (i < src->nclient) && !blitz_ispointinrect(pt->x, pt->y, &src->client[i]->frame.rect); i++); - if((i < src->clientsz) && src->client[i] && (c != src->client[i])) { - size_t j; - for(j = 0; (j < src->clientsz) && src->client[j] && (src->client[j] != c); j++); + if((i < src->nclient) && (c != src->client[i])) { + size_t j = client_to_index(c); + Client *tmp = src->client[j]; src->client[j] = src->client[i]; - src->client[i] = c; + src->client[i] = tmp; arrange_column(src); } } @@ -185,53 +178,3 @@ new_column(Area *old) focus_client(c, True); return col; } - -/* -static void -swap_client(void *obj, char *arg) -{ - Page *p = obj; - Client *c = sel_client_of_page(p); - Area *west = nil, *east = nil, *col = c->area; - Client *north = nil, *south = nil; - size_t i; - - if(!col || !arg) - return; - - for(i = 1; i < p->narea && (p->area[i] != col); i++); - west = i ? p->area[i - 1] : nil; - east = (i < p->areasz) && p->area[i + 1] ? p->area[i + 1] : nil; - - for(i = 0; (i < col->nclient) && (col->client[i] != c); i++); - north = i ? col->client[i - 1] : nil; - south = (i + 1 < col->nclient) ? col->client[i + 1] : nil; - - if(!strncmp(arg, "north", 6) && north) { - col->client[i] = col->client[i - 1]; - col->client[i - 1] = c; - arrange_column(p, col); - } else if(!strncmp(arg, "south", 6) && south) { - col->client[i] = col->client[i + 1]; - col->client[i + 1] = c; - arrange_column(p, col); - } - else if(!strncmp(arg, "west", 5) && west) { - col->client[i] = west->client[west->sel]; - west->client[west->sel] = c; - west->client[west->sel]->area = west; - col->client[i]->area = col; - arrange_column(p, col); - arrange_column(p, west); - } else if(!strncmp(arg, "east", 5) && east) { - col->client[i] = west->client[west->sel]; - col->client[i]->area = col; - east->client[east->sel] = c; - east->client[east->sel]->area = east; - arrange_column(p, col); - arrange_column(p, east); - } - focus_client(c); -} - -*/ diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -194,6 +194,7 @@ int area_to_index(Area *a); int aid_to_index(Page *p, unsigned short id); void update_area_geometry(Area *a); void select_area(Area *a, char *arg); +void sendto_area(Area *new, Client *c); /* bar.c */ Label *new_label();