commit 0cca58fe53a29390ef82fd19fe7d1271068e81cc
parent 8a333e8010e609064523a76db4be0b3c1cea88b9
Author: Kris Maglione <jg@suckless.org>
Date: Wed, 7 Feb 2007 23:23:18 -0500
Some refactoring, mainly related to stacking of the floating layer.
Diffstat:
5 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/area.c b/area.c
@@ -346,8 +346,9 @@ select_area(Area *a, char *arg) {
if(p->anext == f) break;
a->sel = p;
arrange_column(a, False);
+ frame_to_top(p);
if(v == screen->sel)
- focus_view(screen, v);
+ restack_view(v);
flush_masked_events(EnterWindowMask);
return nil;
}
@@ -357,8 +358,9 @@ select_area(Area *a, char *arg) {
p = f->anext ? f->anext : a->frame;
a->sel = p;
arrange_column(a, False);
+ frame_to_top(p);
if(v == screen->sel)
- focus_view(screen, v);
+ restack_view(v);
flush_masked_events(EnterWindowMask);
return nil;
}
diff --git a/event.c b/event.c
@@ -97,8 +97,10 @@ buttonpress(XEvent *e) {
break;
}
}else{
- if(ev->button == Button1)
- focus(f->client, True);
+ if(ev->button == Button1) {
+ frame_to_top(f);
+ restack_view(f->view);
+ }
XAllowEvents(blz.dpy, ReplayPointer, ev->time);
}
}
diff --git a/frame.c b/frame.c
@@ -83,6 +83,21 @@ resize_frame(Frame *f, XRectangle *r) {
}
void
+frame_to_top(Frame *f) {
+ Frame **tf;
+ Area *a;
+
+ a = f->area;
+ if(!a->floating)
+ return;
+ for(tf=&a->frame; *tf; tf=&(*tf)->anext)
+ if(*tf == f) break;
+ *tf = f->anext;
+ f->anext = a->frame;
+ a->frame = f;
+}
+
+void
swap_frames(Frame *fa, Frame *fb) {
XRectangle trect;
Area *a;
diff --git a/view.c b/view.c
@@ -186,14 +186,6 @@ restack_view(View *v) {
wins[0] = screen->barwin;
for(a=v->area; a; a=a->next) {
if(a->frame) {
- if(a == v->area) {
- Frame **tf;
- for(tf=&a->frame; *tf; tf=&(*tf)->anext)
- if(*tf == a->sel) break;
- *tf = a->sel->anext;
- a->sel->anext = a->frame;
- a->frame = a->sel;
- }
wins[n++] = a->sel->client->framewin;
for(f=a->frame; f; f=f->anext) {
Client *c = f->client;
diff --git a/wmii.h b/wmii.h
@@ -319,6 +319,7 @@ extern Frame *create_frame(Client *c, View *v);
extern void remove_frame(Frame *f);
extern void insert_frame(Frame *pos, Frame *f, Bool before);
extern void resize_frame(Frame *f, XRectangle *r);
+extern void frame_to_top(Frame *f);
extern void swap_frames(Frame *fa, Frame *fb);
extern void draw_frame(Frame *f);
extern void draw_frames();