commit 0a5aa6a6a483916cdae1e412a6c9ebd41ef6ee5c
parent 4c6e7378708cf2e5ac560e155f583f74a64a6009
Author: Kris Maglione <bsdaemon@wmii.de>
Date: Fri, 30 Jun 2006 02:02:44 -0400
Fixed frame bug from the mailing list plus other frame related cleanup.
Diffstat:
7 files changed, 32 insertions(+), 36 deletions(-)
diff --git a/cmd/wm/area.c b/cmd/wm/area.c
@@ -229,11 +229,8 @@ attach_to_area(Area *a, Frame *f, Bool send)
if(!c->floating) { /* column */
f->rect.height = h;
arrange_column(a, False);
- }
- else { /* floating */
+ }else /* floating */
place_client(a, c);
- resize_client(c, &f->rect, True);
- }
}
void
@@ -344,6 +341,5 @@ select_area(Area *a, char *arg)
v->sel = new;
if(a->floating != new->floating)
v->revert = a;
- draw_frames();
return nil;
}
diff --git a/cmd/wm/bar.c b/cmd/wm/bar.c
@@ -62,8 +62,6 @@ void
resize_bar(WMScreen *s)
{
View *v;
- Area *a;
- Frame *f;
s->brect = s->rect;
s->brect.height = height_of_bar();
@@ -72,15 +70,8 @@ resize_bar(WMScreen *s)
XSync(blz.display, False);
draw_bar(s);
- for(v=view; v; v=v->next) {
- for(a = v->area; a; a=a->next) {
- a->rect.height = s->rect.height - s->brect.height;
- arrange_column(a, False);
- }
- for(f=v->area->frame; f; f=f->anext) {
- resize_client(f->client, &f->rect, False);
- }
- }
+ for(v=view; v; v=v->next)
+ arrange_view(v);
}
void
diff --git a/cmd/wm/client.c b/cmd/wm/client.c
@@ -158,21 +158,23 @@ update_client_grab(Client *c, Bool is_sel)
void
focus_client(Client *c, Bool restack)
{
+ Client *old_in_area;
Client *old;
Frame *f;
- Client *old_in_area;
View *v;
if(!sel_screen)
return;
- old = sel_client();
f = c->sel;
- old_in_area = sel_client_of_area(f->area);
v = f->area->view;
+ old = sel_client();
+ old_in_area = sel_client_of_area(f->area);
+
v->sel = f->area;
f->area->sel = f;
c->floating = f->area->floating;
+
if(restack)
restack_view(v);
else {
@@ -555,6 +557,7 @@ resize_client(Client *c, XRectangle *r, Bool ignore_xcall)
XMoveResizeWindow(blz.display, c->win, c->rect.x, c->rect.y,
c->rect.width, c->rect.height);
configure_client(c);
+ draw_frame(c->sel);
}
}
@@ -686,6 +689,10 @@ send_client(Frame *f, char *arg)
return Ebadvalue;
flush_masked_events(EnterWindowMask);
update_views();
+ if(f->view == screen->sel) {
+ focus_client(f->client, False);
+ focus_view(screen, f->view);
+ }
return nil;
}
@@ -733,6 +740,7 @@ update_client_views(Client *c, char **tags)
tags++;
}
}
+ focus_view(screen, screen->sel);
}
static int
diff --git a/cmd/wm/column.c b/cmd/wm/column.c
@@ -66,7 +66,7 @@ relax_column(Area *a)
for(f=a->frame; f; f=f->anext) {
f->rect.x = a->rect.x + (a->rect.width - f->rect.width) / 2;
f->rect.y = a->rect.y + (a->rect.height - f->rect.height) / 2;
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
return;
}
@@ -89,7 +89,7 @@ relax_column(Area *a)
for(f=a->frame; f && (hx < hdiff); f=f->anext) {
unsigned int tmp = f->rect.height;
f->rect.height += hx;
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
hdiff -= (f->rect.height - tmp);
}
}
@@ -104,7 +104,7 @@ relax_column(Area *a)
f->rect.x = a->rect.x + (a->rect.width - f->rect.width) / 2;
yoff = f->rect.y + f->rect.height + hdiff;
}
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
}
@@ -175,7 +175,7 @@ arrange_column(Area *a, Bool dirty)
f->rect.y = yoff;
f->rect.width = a->rect.width;
yoff += f->rect.height;
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
break;
case Colstack:
@@ -190,7 +190,7 @@ arrange_column(Area *a, Bool dirty)
else
f->rect.height = height_of_bar();
yoff += f->rect.height;
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
break;
Fallthrough:
@@ -198,7 +198,7 @@ Fallthrough:
for(f=a->frame; f; f=f->anext) {
f->rect = a->rect;
if(f != a->sel) f->rect.x = screen->rect.width * 2;
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
break;
default:
@@ -206,7 +206,6 @@ Fallthrough:
}
relax_column(a);
- focus_view(screen, a->view);
flush_masked_events(EnterWindowMask);
}
@@ -218,7 +217,7 @@ match_horiz(Area *a, XRectangle *r)
for(f=a->frame; f; f=f->anext) {
f->rect.x = r->x;
f->rect.width = r->width;
- resize_client(f->client, &f->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
}
@@ -309,16 +308,16 @@ AfterHorizontal:
north->rect.height = new->y - north->rect.y;
f->rect.height += f->rect.y - new->y;
f->rect.y = new->y;
- resize_client(north->client, &north->rect, True);
- resize_client(f->client, &f->rect, True);
+ //resize_client(north->client, &north->rect, True);
+ //resize_client(f->client, &f->rect, True);
}
if(south && (new->y + new->height != f->rect.y + f->rect.height)) {
south->rect.height -= new->y + new->height - south->rect.y;
south->rect.y = new->y + new->height;
f->rect.y = new->y;
f->rect.height = new->height;
- resize_client(f->client, &f->rect, False);
- resize_client(south->client, &south->rect, True);
+ //resize_client(f->client, &f->rect, False);
+ //resize_client(south->client, &south->rect, True);
}
AfterVertical:
diff --git a/cmd/wm/event.c b/cmd/wm/event.c
@@ -89,7 +89,6 @@ handle_motionnotify(XEvent *e)
{
Frame *f;
XMotionEvent *ev = &e->xmotion;
-
if((f = frame_of_win(ev->window))) {
if(blitz_bmotion_input(&f->tagbar, ev->x, ev->y))
draw_frame(f);
@@ -248,10 +247,11 @@ handle_expose(XEvent *e)
{
XExposeEvent *ev = &e->xexpose;
static Frame *f;
+
if(ev->count == 0) {
if(ev->window == screen->barwin)
draw_bar(screen);
- else if((f = frame_of_win(ev->window)))
+ else if((f = frame_of_win(ev->window)) && f->view == screen->sel)
draw_frame(f);
}
}
diff --git a/cmd/wm/frame.c b/cmd/wm/frame.c
@@ -94,7 +94,9 @@ draw_frame(Frame *f)
Frame *p;
unsigned int fidx, size, w;
- for(fidx=0, p=f->area->frame; p && p != f; p=p->anext, fidx++);
+ fidx = 0;
+ for(p=f->area->frame; p != f; p=p->anext)
+ fidx++;
for(size=fidx; p; p=p->anext, size++);
if(def.border) {
@@ -139,7 +141,7 @@ draw_frames()
{
Client *c;
for(c=client; c; c=c->next)
- if(c->sel && (c->sel->area->view == screen->sel)) {
+ if(c->sel && c->sel->view == screen->sel) {
update_frame_widget_colors(c->sel);
draw_frame(c->sel);
}
diff --git a/cmd/wm/view.c b/cmd/wm/view.c
@@ -130,8 +130,8 @@ focus_view(WMScreen *s, View *v)
for(c=client; c; c=c->next)
if((f = c->sel)) {
if(f->view == v) {
- XMoveWindow(blz.display, c->framewin, f->rect.x, f->rect.y);
resize_client(c, &f->rect, False);
+ //XMoveWindow(blz.display, c->framewin, f->rect.x, f->rect.y);
}else
XMoveWindow(blz.display, c->framewin, 2 * s->rect.width + f->rect.x,
f->rect.y);