wmii

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

commit 93b9d5c9f01b77a7f095da2bc1a8b1ecb138cf00
parent 0728d68133ff668c9f85939b7d87b7fb61c0c15d
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Thu,  2 Mar 2006 17:38:15 +0100

some other fix


Diffstat:
cmd/wm/area.c | 62+++++++++++++++++++++++++++++++-------------------------------
cmd/wm/client.c | 18++++++++++--------
cmd/wm/wm.h | 10+++++-----
config.mk | 2+-
4 files changed, 47 insertions(+), 45 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -37,8 +37,12 @@ destroy_area(Area *a) free(a->client); cext_array_detach((void **)p->area, a, &p->areasz); p->narea--; - if(p->sel >= p->narea) - p->sel = p->narea - 1; + if(p->sel >= p->narea) { + if(p->narea) + p->sel = p->narea - 1; + else + p->sel = 0; + } free(a); } @@ -95,15 +99,15 @@ select_area(Area *a, char *arg) } void -sendto_area(Area *to, Client *c) +send_toarea(Area *to, Client *c) { - detach_client_area(c, True); - attach_client2area(to, c); + detach_fromarea(c); + attach_toarea(to, c); focus_client(c); } void -attach_client2area(Area *a, Client *c) +attach_toarea(Area *a, Client *c) { Page *p = a->page; if(area2index(a) && a->capacity && (a->capacity == a->nclient)) { @@ -117,11 +121,11 @@ attach_client2area(Area *a, Client *c) } if(!to) { to = alloc_area(p); - sendto_area(to, a->client[a->sel]); + send_toarea(to, a->client[a->sel]); arrange_page(p, True); } else - sendto_area(to, a->client[a->sel]); + send_toarea(to, a->client[a->sel]); } a->client = (Client **)cext_array_attach( @@ -135,38 +139,34 @@ attach_client2area(Area *a, Client *c) } void -detach_client_area(Client *c, Bool ignfetch) +detach_fromarea(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 && !ignfetch) { /* area */ - if(a->capacity && (a->nclient < a->capacity)) { + + if(0 && i > 0) { + if(a->nclient < a->capacity) { for(++i; i < p->narea; i++) { Area *tmp = p->area[i]; - if(!tmp->capacity) - 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); + continue; + send_toarea(a, tmp->client[0]); arrange_page(p, True); } } - else - arrange_area(a); } + if(!a->nclient && (p->narea > 2)) { + destroy_area(a); + arrange_page(p, True); + } + else + arrange_area(a); } void @@ -174,7 +174,7 @@ match_capacity(Area *a) { while(a->nclient > a->capacity) { Client *c = a->client[a->nclient - 1]; - detach_client_area(c, True); + detach_fromarea(c); attach_client(c); } } @@ -303,7 +303,7 @@ arrange_area(Area *a) } void -arrange_page(Page *p, Bool update_areas) +arrange_page(Page *p, Bool updategeometry) { unsigned int i; unsigned int width; @@ -314,7 +314,7 @@ arrange_page(Page *p, Bool update_areas) width = rect.width / (p->narea - 1); for(i = 1; i < p->narea; i++) { Area *a = p->area[i]; - if(update_areas) { + if(updategeometry) { update_area_geometry(a); a->rect.x = (i - 1) * width; a->rect.width = width; @@ -405,12 +405,12 @@ drop_moving(Client *c, XRectangle *new, XPoint * pt) !blitz_ispointinrect(pt->x, pt->y, &p->area[i]->rect); i++); if((tgt = ((i < p->narea) ? p->area[i] : nil))) { if(tgt != src) { - sendto_area(tgt, c); + send_toarea(tgt, c); arrange_area(tgt); } else { - for(i = 0; (i < src->nclient) && - !blitz_ispointinrect(pt->x, pt->y, &src->client[i]->frame.rect); i++); + for(i = 0; (i < src->nclient) && !blitz_ispointinrect( + pt->x, pt->y, &src->client[i]->frame.rect); i++); if((i < src->nclient) && (c != src->client[i])) { unsigned int j = client2index(c); Client *tmp = src->client[j]; diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -347,12 +347,12 @@ gravitate(Client * c, unsigned int tabh, unsigned int bw, int invert) } void -attach_client2page(Page *p, Client *c) +attach_topage(Page *p, Client *c) { Area *a = p->area[p->sel]; reparent_client(c, c->frame.win, c->rect.x, c->rect.y); - attach_client2area(a, c); + attach_toarea(a, c); map_client(c); XMapWindow(dpy, c->frame.win); } @@ -366,7 +366,7 @@ attach_client(Client *c) else p = page[sel]; - attach_client2page(p, c); + attach_topage(p, c); focus_client(c); } @@ -388,7 +388,7 @@ detach_client(Client *c, Bool unmap) reparent_client(c, root, c->rect.x, c->rect.y); XUnmapWindow(dpy, c->frame.win); } - detach_client_area(c, False); + detach_fromarea(c); } c->area = nil; if(c->revert) @@ -543,7 +543,8 @@ select_client(Client *c, char *arg) } void -sendtopage_client(Client *c, char *arg) { +sendtopage_client(Client *c, char *arg) +{ Page *p; Client *to; @@ -559,7 +560,7 @@ sendtopage_client(Client *c, char *arg) { p = page[i]; } detach_client(c, False); - attach_client2page(p, c); + attach_topage(p, c); if(p == page[sel]) focus_client(c); else if((to = sel_client_of_page(page[sel]))) @@ -567,7 +568,8 @@ sendtopage_client(Client *c, char *arg) { } void -sendtoarea_client(Client *c, char *arg) { +sendtoarea_client(Client *c, char *arg) +{ const char *errstr; Area *to, *a = c->area; Page *p = a->page; @@ -593,7 +595,7 @@ sendtoarea_client(Client *c, char *arg) { return; to = p->area[i]; } - sendto_area(to, c); + send_toarea(to, c); if(!a->nclient) { destroy_area(a); arrange_page(p, True); diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -195,10 +195,10 @@ int area2index(Area *a); int aid2index(Page *p, unsigned short id); 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, Bool ignfetch); -void arrange_page(Page *p, Bool update_area_geometry); +void send_toarea(Area *to, Client *c); +void attach_toarea(Area *a, Client *c); +void detach_fromarea(Client *c); +void arrange_page(Page *p, Bool updategeometry); void arrange_area(Area *a); void resize_area(Client *c, XRectangle *r, XPoint *pt); Area *new_area(Area *old); @@ -226,7 +226,7 @@ void unmap_client(Client *c); void map_client(Client *c); void reparent_client(Client *c, Window w, int x, int y); void attach_client(Client *c); -void attach_client2page(Page *p, Client *c); +void attach_topage(Page *p, Client *c); void detach_client(Client *c, Bool unmap); Client *sel_client(); Client *sel_client_of_page(Page *p); diff --git a/config.mk b/config.mk @@ -8,7 +8,7 @@ MANPREFIX = ${PREFIX}/share/man X11INC = /usr/X11R6/include X11LIB = /usr/X11R6/lib -VERSION = 20060302 +VERSION = 3-current # includes and libs LIBS = -L${PREFIX}/lib -L/usr/lib -lc -lm -L${X11LIB} -lX11