wmii

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

commit d8970ae74a565e16d24be6d79d1d1c19924fdbbf
parent 8102bb76d0f00e6b0abe93a35e822daf7d2b5593
Author: Kris Maglione <jg@suckless.org>
Date:   Fri,  2 Oct 2009 02:10:57 -0400

Fix moving between vertically stacked Xinerama screens. Fixes issue #92.

Diffstat:
cmd/wmii/column.c | 2+-
cmd/wmii/message.c | 48++++++++++++++++++++++++++++++++----------------
2 files changed, 33 insertions(+), 17 deletions(-)

diff --git a/cmd/wmii/column.c b/cmd/wmii/column.c @@ -238,7 +238,7 @@ find(Area **ap, Frame **fp, int dir, bool wrap, bool stack) { if(!*ap) return false; *fp = stack_find(*ap, *fp, dir, stack); - return *fp; + return true; } if(dir != East && dir != West) die("not reached"); diff --git a/cmd/wmii/message.c b/cmd/wmii/message.c @@ -976,6 +976,27 @@ msg_selectframe(Area *a, IxpMsg *m, int sym) { return nil; } +static char* +sendarea(Frame *f, Area *to, bool swap) { + Client *c; + + c = f->client; + if(!to) + return Ebadvalue; + + if(!swap) + area_moveto(to, f); + else if(to->sel) + frame_swap(f, to->sel); + else + return Ebadvalue; + + frame_focus(client_viewframe(c, f->view)); + /* view_arrange(v); */ + view_update_all(); + return nil; +} + char* msg_sendclient(View *v, IxpMsg *m, bool swap) { Area *to, *a; @@ -1036,6 +1057,7 @@ msg_sendclient(View *v, IxpMsg *m, bool swap) { break; } + if(!to && !swap) { /* XXX: Multihead - clean this up, move elsewhere. */ if(!f->anext && f == f->area->frame) { @@ -1050,32 +1072,27 @@ msg_sendclient(View *v, IxpMsg *m, bool swap) { } } - if(!to) - return Ebadvalue; - - if(!swap) - area_moveto(to, f); - else if(to->sel) - frame_swap(f, to->sel); - else - return Ebadvalue; - - frame_focus(client_viewframe(c, v)); - /* view_arrange(v); */ - view_update_all(); - return nil; + return sendarea(f, to, swap); } static char* msg_sendframe(Frame *f, int sym, bool swap) { Client *c; + Area *a; Frame *fp; SET(fp); c = f->client; + + a = f->area; + fp = f; + if(!find(&a, &fp, DIR(sym), false, false)) + return Ebadvalue; + if(a != f->area) + return sendarea(f, a, swap); + switch(sym) { case LUP: - /* XXX: Multihead. */ fp = f->aprev; if(!fp) return Ebadvalue; @@ -1083,7 +1100,6 @@ msg_sendframe(Frame *f, int sym, bool swap) { fp = fp->aprev; break; case LDOWN: - /* XXX: Multihead. */ fp = f->anext; if(!fp) return Ebadvalue;