From: Jason Woofenden Date: Thu, 26 Mar 2015 01:19:13 +0000 (-0400) Subject: fix monocle mode X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=commitdiff_plain;h=c507ba665aff1fccf0edbc57c0465be32a17dead;ds=sidebyside fix monocle mode --- diff --git a/dwm.c b/dwm.c index dd3bc84..0a488fa 100644 --- a/dwm.c +++ b/dwm.c @@ -187,6 +187,7 @@ static void monocle(Monitor *m); static void motionnotify(XEvent *e); static void movemouse(const Arg *arg); static Client *nexttiled(Client *c); +static Client *snexttiled(Client *c); static Client *nextvisible(Client *c); static void pop(Client *); static void propertynotify(XEvent *e); @@ -374,7 +375,7 @@ applyrules(Client *c) { Bool applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) { Bool baseismin; - Monitor *m = c->mon; + // Monitor *m = c->mon; /* set minimum possible */ *w = MAX(1, *w); @@ -389,16 +390,17 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, Bool interact) { if(*y + *h + 2 * c->bw < 0) *y = 0; } - else { - if(*x >= m->wx + m->ww) - *x = m->wx + m->ww - WIDTH(c); - if(*y >= m->wy + m->wh) - *y = m->wy + m->wh - HEIGHT(c); - if(*x + *w + 2 * c->bw <= m->wx) - *x = m->wx; - if(*y + *h + 2 * c->bw <= m->wy) - *y = m->wy; - } + // jason: let windows be offscreen + //else { + // if(*x >= m->wx + m->ww) + // *x = m->wx + m->ww - WIDTH(c); + // if(*y >= m->wy + m->wh) + // *y = m->wy + m->wh - HEIGHT(c); + // if(*x + *w + 2 * c->bw <= m->wx) + // *x = m->wx; + // if(*y + *h + 2 * c->bw <= m->wy) + // *y = m->wy; + //} if(*h < bh) *h = bh; if(*w < bh) @@ -599,6 +601,7 @@ clientmessage(XEvent *e) { || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); } else if(cme->message_type == netatom[NetActiveWindow]) { + // Jason added this so apps can't steal focus: return; if(!ISVISIBLE(c)) { c->mon->seltags ^= 1; @@ -889,7 +892,7 @@ focus(Client *c) { XDeleteProperty(dpy, root, netatom[NetActiveWindow]); } selmon->sel = c; - jason_layout(selmon); + arrange(selmon); update_window_opacities(selmon); drawbars(); if(c && (!root || (c->win!=root)) ) @@ -1198,8 +1201,13 @@ monocle(Monitor *m) { n++; if(n > 0) /* override layout symbol */ snprintf(m->ltsymbol, sizeof m->ltsymbol, "[%d]", n); - for(c = nexttiled(m->clients); c; c = nexttiled(c->next)) - resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False, 0); + for(c = snexttiled(m->stack); c; c = snexttiled(c->snext)) { + if (c == m->sel) { + resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False, 0); + } else { + resize(c, m->wx, m->wy - 4000, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False, 0); + } + } } void @@ -1287,6 +1295,12 @@ nexttiled(Client *c) { } Client * +snexttiled(Client *c) { + for(; c && (c->isfloating || !ISVISIBLE(c)); c = c->snext); + return c; +} + +Client * nextvisible(Client *c) { for(; c && !ISVISIBLE(c); c = c->next); return c; @@ -1369,7 +1383,7 @@ resizeclient(Client *c, int x, int y, int w, int h, Client *base) { c->oldy = c->y; c->y = wc.y = y; c->oldw = c->w; c->w = wc.width = w; c->oldh = c->h; c->h = wc.height = h; - base = 0; + // base = 0; if (base) { wc.stack_mode = Above; wc.sibling = base->win;