wmii

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

commit 37dc275dabf1ee9275a112c85ed2661cc19439c0
parent 500af3016fab320e10b4efb1bd488bf55e3b0729
Author: Kris Maglione <jg@suckless.org>
Date:   Thu, 15 Feb 2007 02:43:33 -0500

Stack fullscreen windows over the bar. Fullscreen mode needs work.


Diffstat:
client.c | 11+++++++----
event.c | 65++++++++++++++++++++++++++++++++---------------------------------
frame.c | 5+++--
view.c | 10+++++++---
wmii.h | 1+
5 files changed, 50 insertions(+), 42 deletions(-)

diff --git a/client.c b/client.c @@ -39,6 +39,9 @@ create_client(Window w, XWindowAttributes *wa) { && c->size.min_width == c->size.max_width && c->size.min_height == c->size.max_height) c->fixedsize = True; + if(c->rect.width == screen->rect.width + && c->rect.height == screen->rect.height) + c->fullscreen = True; XSetWindowBorderWidth(blz.dpy, c->win, 0); XAddToSaveSet(blz.dpy, c->win); @@ -573,7 +576,7 @@ resize_client(Client *c, XRectangle *r) { return; } - c->rect = f->crect; + c->rect = f->rect; if(f->area->mode == Colmax && f->area->sel != f) { unmap_frame(c); @@ -583,12 +586,12 @@ resize_client(Client *c, XRectangle *r) { unmap_client(c, IconicState); }else { XMoveResizeWindow(blz.dpy, c->win, - c->rect.x, c->rect.y, - c->rect.width, c->rect.height); + f->crect.x, f->crect.y, + f->crect.width, f->crect.height); map_client(c); map_frame(c); + configure_client(c); } - configure_client(c); } void diff --git a/event.c b/event.c @@ -90,53 +90,52 @@ configurerequest(XEvent *e) { XWindowChanges wc; XRectangle *frect; Client *c; + Frame *f; c = client_of_win(ev->window); - wc.x = ev->x; - wc.y = ev->y; - wc.width = ev->width; - wc.height = ev->height; - ev->value_mask &= ~(CWSibling|CWStackMode); if(c) { + f = c->sel; gravitate_client(c, True); if(ev->value_mask & CWX) c->rect.x = ev->x; if(ev->value_mask & CWY) - c->rect.y = ev->y; + f->rect.y = ev->y; if(ev->value_mask & CWWidth) - c->rect.width = ev->width; + f->rect.width = ev->width; if(ev->value_mask & CWHeight) - c->rect.height = ev->height; + f->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; - - frect->y = -labelh(&def.font); - frect->x = -def.border; - frect->width = c->rect.width + 2 * def.border; - frect->height = c->rect.height + def.border + labelh(&def.font); - - wc.border_width = 1; - wc.stack_mode = ev->detail; - if(c->sel->area->floating) - resize_client(c, frect); - wc.x = frect->x + labelh(&def.font); - wc.y = frect->y + def.border; - wc.width = frect->width - 2 * def.border; - wc.height = frect->height - def.border - labelh(&def.font); - } - } - ev->value_mask &= ~CWStackMode; - ev->value_mask |= CWBorderWidth; - XConfigureWindow(blz.dpy, ev->window, ev->value_mask, &wc); - XSync(blz.dpy, False); + if(c->sel->area->floating) + frect=&c->sel->rect; + else + frect=&c->sel->revert; + + *frect = c->rect; + frect->y = -labelh(&def.font); + frect->x = -def.border; + frect->width += 2 * def.border; + frect->height += frame_delta_h(); + c->rect = f->crect; + + if(c->sel->area->floating) + resize_client(c, frect); + else + configure_client(c); + }else{ + wc.x = ev->x; + wc.y = ev->y; + wc.width = ev->width; + wc.height = ev->height; + wc.border_width = ev->border_width; + wc.sibling = ev->above; + wc.stack_mode = ev->detail; + XConfigureWindow(blz.dpy, ev->window, ev->value_mask, &wc); + XSync(blz.dpy, False); + } } static void diff --git a/frame.c b/frame.c @@ -100,10 +100,11 @@ resize_frame(Frame *f, XRectangle *r) { f->rect.height = labelh(&def.font); if(f->area->floating) { - if((f->crect.width == screen->rect.width) && - (f->crect.height == screen->rect.height)) { + if(c->fullscreen) { f->rect.x = -def.border; f->rect.y = -labelh(&def.font); + f->rect.width = screen->rect.width + 2 * def.border; + f->rect.height = screen->rect.height + frame_delta_h(); }else check_frame_constraints(&f->rect); } diff --git a/view.c b/view.c @@ -169,7 +169,7 @@ restack_view(View *v) { static uint winssz = 0; i = 0; - n = 1; + n = 0; for(c=client; c; c=c->next, i++); if(i >= winssz) { @@ -177,9 +177,13 @@ restack_view(View *v) { wins = erealloc(wins, sizeof(Window) * winssz); } - wins[0] = screen->barwin; for(f=v->area->stack; f; f=f->snext) - wins[n++] = f->client->framewin;; + if(f->client->fullscreen) + wins[n++] = f->client->framewin;; + wins[n++] = screen->barwin; + for(f=v->area->stack; f; f=f->snext) + if(!f->client->fullscreen) + wins[n++] = f->client->framewin;; for(a=v->area->next; a; a=a->next) { if(a->frame) { wins[n++] = a->sel->client->framewin; diff --git a/wmii.h b/wmii.h @@ -158,6 +158,7 @@ struct Client { int proto; Bool floating; Bool fixedsize; + Bool fullscreen; Bool urgent; Bool mapped; Bool frame_mapped;