wmii

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

commit ace9b63747b753f3c7885547db68f4bba4a712a6
parent d8daa2fe9649c240600127ee82149074fbbbf476
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Thu, 19 Jan 2006 16:02:18 +0200

fixed several issues in column layout reported by tube


Diffstat:
cmd/wm/client.c | 18++++++++++++++++++
cmd/wm/layout_column.c | 17+++--------------
cmd/wm/layout_float.c | 14++------------
cmd/wm/wm.h | 1+
4 files changed, 24 insertions(+), 26 deletions(-)

diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -37,6 +37,24 @@ set_client_state(Client * c, int state) } void +focus_client(Client *new, Client *old) +{ + if(old && (old != new)) { + ungrab_client(old, AnyModifier, AnyButton); + grab_client(old, AnyModifier, AnyButton); + draw_frame(old->frame); + } + ungrab_client(new, AnyModifier, AnyButton); + grab_client(new, Mod1Mask, Button1); + grab_client(new, Mod1Mask, Button3); + XRaiseWindow(dpy, new->win); + XSetInputFocus(dpy, new->win, RevertToPointerRoot, CurrentTime); + draw_frame(new->frame); + invoke_wm_event(def[WM_EVENT_CLIENT_UPDATE]); + XSync(dpy, False); +} + +void map_client(Client * c) { XMapRaised(dpy, c->win); diff --git a/cmd/wm/layout_column.c b/cmd/wm/layout_column.c @@ -180,6 +180,7 @@ detach_frame(Layout *l, Frame * old) acme->frames = old->next; if(old->next) old->next->prev = old->prev; + old->prev = old->next = nil; old->aux = nil; detach_frame_from_layout(old); acme->nframes--; @@ -424,19 +425,7 @@ focus_col(Layout *l, Client *c, Bool raise) XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->rect.width / 2, c->rect.height / 2); - if(old && (old != c)) { - ungrab_client(old, AnyModifier, AnyButton); - grab_client(old, AnyModifier, AnyButton); - draw_frame(old->frame); - } - ungrab_client(c, AnyModifier, AnyButton); - grab_client(c, Mod1Mask, Button1); - grab_client(c, Mod1Mask, Button3); - XRaiseWindow(dpy, c->win); - XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); - draw_frame(c->frame); - invoke_wm_event(def[WM_EVENT_CLIENT_UPDATE]); - XSync(dpy, False); + focus_client(c, old); } static Frame * @@ -504,7 +493,7 @@ select_frame(void *obj, char *arg) for(cell = col->cells; cell && i != idx; cell = cell->next) i++; } - if(cell && cell != col) + if(cell && cell != col->sel) focus_col(l, cell->frame->sel, True); } diff --git a/cmd/wm/layout_float.c b/cmd/wm/layout_float.c @@ -108,6 +108,7 @@ detach_frame(Layout *l, Frame * old) if(fl->sel == old) fl->sel = fl->frames; + old->prev = old->next = nil; detach_frame_from_layout(old); fl->nframes--; } @@ -193,18 +194,7 @@ focus_float(Layout *l, Client *c, Bool raise) c->rect.width / 2, c->rect.height / 2); } - if(old && (old != c)) { - grab_client(old, AnyModifier, AnyButton); - draw_frame(old->frame); - } - ungrab_client(c, AnyModifier, AnyButton); - grab_client(c, Mod1Mask, Button1); - grab_client(c, Mod1Mask, Button3); - XRaiseWindow(dpy, c->win); - XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); - draw_frame(c->frame); - invoke_wm_event(def[WM_EVENT_CLIENT_UPDATE]); - XSync(dpy, False); + focus_client(c, old); } static Frame * diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -229,6 +229,7 @@ Client *sel_client(); Client *clientat(Client * clients, size_t idx); void detach_detached(Client * c); void attach_detached(Client * c); +void focus_client(Client *new, Client *old); /* frame.c */ Frame *win_to_frame(Window w);