wmii

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

commit 17766a5001bc38abc3435d6746521ad3e19d9844
parent f22c04c0619d3a62646b41a9ce48bc0b0fe030c8
Author: Denis Grelich <denisg@suckless.org>
Date:   Sat, 13 Jan 2007 02:01:41 +0100

introduced new events: DestroyClient, CreateColumn, ColumnFocus, FocusFloating, DestroyColumn

Diffstat:
area.c | 38++++++++++++++++++++++++++++++--------
client.c | 10++++++++++
view.c | 16++++++++++------
3 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/area.c b/area.c @@ -15,11 +15,11 @@ sel_client_of_area(Area *a) { Area * create_area(View *v, Area *pos, unsigned int w) { static unsigned short id = 1; - unsigned int area_size, col_size; + unsigned int area_size, col_size, i; unsigned int min_width = screen->rect.width/NCOL; - Area *a, **p = pos ? &pos->next : &v->area; + Area *ta, *a, **p = pos ? &pos->next : &v->area; - for(area_size = 0, a=v->area; a; a=a->next, area_size++); + for(i = 0, area_size = 0, a=v->area; a && a != *p; a=a->next, area_size++, i++); col_size = area_size ? area_size - 1 : 0; if(!w) { if(col_size) @@ -45,6 +45,10 @@ create_area(View *v, Area *pos, unsigned int w) { a->next = *p; *p = a; v->sel = a; + if(i) write_event("CreateColumn %d\n", i); + for(ta=v->area, i = 0; ta && ta != v->sel; ta=ta->next, i++); + if(i) write_event("ColumnFocus %d\n", i); + else write_event("FocusFloating\n"); return a; } @@ -53,17 +57,21 @@ destroy_area(Area *a) { Client *c; Area *ta; View *v = a->view; + unsigned int i; assert(!a->frame && "wmiiwm: fatal, destroying non-empty area"); if(v->revert == a) v->revert = NULL; for(c=client; c; c=c->next) if(c->revert == a) c->revert = NULL; - for(ta=v->area; ta && ta->next != a; ta=ta->next); + for(ta=v->area, i = 0; ta && ta->next != a; ta=ta->next, i++); if(ta) { ta->next = a->next; - if(v->sel == a) + if(v->sel == a) { v->sel = ta->floating ? ta->next : ta; + if(i) write_event("ColumnFocus %d\n", i + 1); + else write_event("FocusFloating\n"); + } } free(a); } @@ -209,6 +217,8 @@ detach_from_area(Area *a, Frame *f) { Frame **ft, *pr = NULL; Client *c = f->client; View *v = a->view; + Area *ta; + unsigned int i; for(ft=&a->frame; *ft; ft=&(*ft)->anext) { if(*ft == f) break; @@ -222,11 +232,15 @@ detach_from_area(Area *a, Frame *f) { if(a->frame) arrange_column(a, False); else { + for(ta=v->area, i = 0; ta && ta != a; ta=ta->next, i++); if(v->area->next->next) destroy_area(a); - else if(!a->frame && v->area->frame) + else if(!a->frame && v->area->frame) { v->sel = v->area; /* focus floating area if it contains something */ + write_event("FocusFloating\n"); + } arrange_view(v); + if(i) write_event("DestroyColumn %d\n", i); } } else if(!a->frame) { @@ -241,12 +255,15 @@ detach_from_area(Area *a, Frame *f) { } else if(v->area->next->frame) v->sel = v->area->next; /* focus first col as fallback */ + for(ta=v->area, i = 0; ta && ta != v->sel; ta=ta->next, i++); + if(i) write_event("ColumnFocus %d\n", i); + else write_event("FocusFloating\n"); } } char * select_area(Area *a, char *arg) { - Area *new; + Area *new, *ta; unsigned int i; Frame *p, *f; View *v; @@ -304,7 +321,12 @@ select_area(Area *a, char *arg) { } if(new->sel) focus_client(new->sel->client, True); - v->sel = new; + if(v->sel != new) { + for(ta=v->area, i = 0; ta && ta != new; ta=ta->next, i++); + if(i) write_event("ColumnFocus %d\n", i); + else write_event("FocusFloating\n"); + v->sel = new; + } if(a->floating != new->floating) v->revert = a; return NULL; diff --git a/client.c b/client.c @@ -141,6 +141,8 @@ focus_client(Client *c, Bool restack) { Client *old; Frame *f; View *v; + unsigned int a_i; + Area *a, *old_a; if(!sel_screen) return; @@ -148,6 +150,7 @@ focus_client(Client *c, Bool restack) { v = f->area->view; old = sel_client(); old_in_area = sel_client_of_area(f->area); + old_a = v->sel; v->sel = f->area; f->area->sel = f; c->floating = f->area->floating; @@ -172,6 +175,11 @@ focus_client(Client *c, Bool restack) { update_frame_widget_colors(c->sel); draw_frame(c->sel); XSync(blz.dpy, False); + if(old_a != v->sel) { + for(a = v->area, a_i = 0; a && a != v->sel; a = a->next, a_i++); + if(a_i) write_event("ColumnFocus %d\n", a_i); + else write_event("FocusFloating\n"); + } write_event("ClientFocus %d\n", idx_of_client(c)); } @@ -367,6 +375,7 @@ void destroy_client(Client *c) { char *dummy = NULL; Client **tc; + uint i = idx_of_client(c); XGrabServer(blz.dpy); XSetErrorHandler(dummy_error_handler); @@ -388,6 +397,7 @@ destroy_client(Client *c) { XSetErrorHandler(wmii_error_handler); XUngrabServer(blz.dpy); flush_masked_events(EnterWindowMask); + write_event("DestroyClient %d\n", i); } void diff --git a/view.c b/view.c @@ -148,17 +148,21 @@ void attach_to_view(View *v, Frame *f) { Area *a; Client *c = f->client; + unsigned int i; c->revert = NULL; + a = v->sel; if(c->trans || c->floating || c->fixedsize || (c->rect.width == screen->rect.width && c->rect.height == screen->rect.height)) - a = v->area; + v->sel = v->area; else if(starting && v->sel->floating) - a = v->area->next; - else - a = v->sel; - attach_to_area(a, f, False); - v->sel = a; + v->sel = v->area->next; + attach_to_area(v->sel, f, False); + if(a != v->sel) { + for(a=v->area, i = 0; a && a != v->sel; a=a->next, i++); + if(i) write_event("ColumnFocus %d\n", i); + else write_event("FocusFloating\n"); + } } void