wmii

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

commit edae9ff3eefe8f2d65160a3a422d88320cc3d2cf
parent 6c8280846abfd291364240ca8a3dc1f730f7cc1f
Author: Kris Maglione <bsdaemon@wmii.de>
Date:   Sun, 25 Jun 2006 22:18:00 -0400

Added size revert handling between floating/managed mode. Fixed term sizing bug (I think)


Diffstat:
cmd/wm/area.c | 7+++++++
cmd/wm/client.c | 5+++--
cmd/wm/event.c | 78+++++++++++++++++++++++++++++++++++++++++-------------------------------------
cmd/wm/frame.c | 12+++++++++---
cmd/wm/fs.c | 5++---
5 files changed, 62 insertions(+), 45 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -210,6 +210,13 @@ place_client(Area *a, Client *c) void send_to_area(Area *to, Area *from, Frame *f) { + cext_assert(to->view == f->view); + + if(to->floating != from->floating) { + XRectangle temp = f->revert; + f->revert = f->rect; + f->rect = temp; + } f->client->revert = from; detach_from_area(from, f); attach_to_area(to, f, True); diff --git a/cmd/wm/client.c b/cmd/wm/client.c @@ -63,8 +63,8 @@ create_client(Window w, XWindowAttributes *wa) c->rect.x = wa->x; c->rect.y = wa->y; c->border = wa->border_width; - c->rect.width = wa->width + 2 * c->border; - c->rect.height = wa->height + 2 * c->border; + c->rect.width = wa->width; + c->rect.height = wa->height; XSetWindowBorderWidth(blz.display, c->win, 0); c->proto = win_proto(c->win); XGetTransientForHint(blz.display, c->win, &c->trans); @@ -355,6 +355,7 @@ manage_client(Client *c) apply_tags(c, c->tags); reparent_client(c, c->framewin, c->rect.x, c->rect.y); + if(!starting) update_views(); map_client(c); diff --git a/cmd/wm/event.c b/cmd/wm/event.c @@ -147,47 +147,50 @@ handle_configurerequest(XEvent *e) { XConfigureRequestEvent *ev = &e->xconfigurerequest; XWindowChanges wc; + XRectangle *frect; Client *c; c = client_of_win(ev->window); ev->value_mask &= ~CWSibling; if(c) { - if(c->frame && c->sel->area->floating) { - gravitate_client(c, True); - - if(c->frame) { - if(ev->value_mask & CWX) - c->rect.x = ev->x; - if(ev->value_mask & CWY) - c->rect.y = ev->y; - if(ev->value_mask & CWWidth) - c->rect.width = ev->width; - if(ev->value_mask & CWHeight) - c->rect.height = ev->height; + gravitate_client(c, True); + + if(ev->value_mask & CWX) + c->rect.x = ev->x; + if(ev->value_mask & CWY) + c->rect.y = ev->y; + if(ev->value_mask & CWWidth) + c->rect.width = ev->width; + if(ev->value_mask & CWHeight) + c->rect.height = ev->height; + if(ev->value_mask & CWBorderWidth) + c->border = ev->border_width; + + gravitate_client(c, False); + + if(c->frame) { + if(c->sel->area->floating) + frect=&c->sel->rect; + else + frect=&c->sel->revert; + + if(c->rect.width >= rect.width && c->rect.height >= rect.height) { + frect->y = wc.y = -height_of_bar(); + frect->x = wc.x = -def.border; } - if(ev->value_mask & CWBorderWidth) - c->border = ev->border_width; - - gravitate_client(c, False); - - if(c->frame) { - Frame *f = c->sel; - if(c->rect.width >= rect.width && c->rect.height >= rect.height) { - f->rect.y = wc.y = -height_of_bar(); - f->rect.x = wc.x = -def.border; - } - else { - f->rect.x = wc.x = c->rect.x - def.border; - f->rect.y = wc.y = c->rect.y - height_of_bar(); - } - f->rect.width = wc.width = c->rect.width + 2 * def.border; - f->rect.height = wc.height = c->rect.height + def.border - + height_of_bar(); - wc.border_width = 1; - wc.sibling = None; - wc.stack_mode = ev->detail; - if(f->area->view != sel) - wc.x += 2 * rect.width; + else { + frect->y = wc.y = c->rect.y - height_of_bar(); + frect->x = wc.x = c->rect.x - def.border; + } + frect->width = wc.width = c->rect.width + 2 * def.border; + frect->height = wc.height = c->rect.height + def.border + + height_of_bar(); + wc.border_width = 1; + wc.sibling = None; + wc.stack_mode = ev->detail; + if(c->sel->area->view != sel) + wc.x += 2 * rect.width; + if(c->sel->area->floating) { XConfigureWindow(blz.display, c->framewin, ev->value_mask, &wc); configure_client(c); } @@ -202,8 +205,8 @@ handle_configurerequest(XEvent *e) if(c && c->frame) { wc.x = def.border; wc.y = height_of_bar(); - wc.width = c->rect.width; - wc.height = c->rect.height; + wc.width = c->sel->rect.width - 2 * def.border; + wc.height = c->sel->rect.height - def.border - height_of_bar(); } wc.border_width = 0; @@ -212,6 +215,7 @@ handle_configurerequest(XEvent *e) ev->value_mask &= ~CWStackMode; ev->value_mask |= CWBorderWidth; XConfigureWindow(blz.display, ev->window, ev->value_mask, &wc); + XSync(blz.display, False); } diff --git a/cmd/wm/frame.c b/cmd/wm/frame.c @@ -17,9 +17,15 @@ create_frame(Client *c, View *v) f->id = id++; f->client = c; f->view = v; - f->revert = f->rect = c->rect; - f->rect.width += 2 * def.border; - f->rect.height += def.border + height_of_bar(); + + if(c->frame) { + f->revert = c->sel->revert; + f->rect = c->sel->rect; + }else{ + f->revert = f->rect = c->rect; + f->revert.width = f->rect.width += 2 * def.border; + f->revert.height = f->rect.height += def.border + height_of_bar(); + } f->collapsed = False; f->tile.blitz = &blz; diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -213,7 +213,7 @@ write_to_buf(P9Req *r, void *buf, unsigned int *len, unsigned int max) { memcpy(buf + offset, r->ifcall.data, count); r->ofcall.count = count; - ((char *)buf)[offset+count] = '\0'; /* shut up valgrind */ + ((char *)buf)[offset+count] = '\0'; /* and save some lines later... we alloc for it anyway */ } @@ -846,7 +846,6 @@ fs_clunk(P9Req *r) { update_views(); break; case FsFKeys: - def.keys[def.keyssz] = '\0'; update_keys(); break; case FsFCtags: @@ -858,7 +857,7 @@ fs_clunk(P9Req *r) { buf = f->bar->buf; i = strlen(f->bar->buf); parse_colors(&buf, &i, &f->bar->brush.color); - while(buf[i - 1] == '\n') + while(i > 0 && buf[i - 1] == '\n') buf[--i] = '\0'; cext_strlcpy(f->bar->text, buf, sizeof(f->bar->text)); draw_bar();