Introduction
Introduction Statistics Contact Development Disclaimer Help
tApply smartborder patch, doesn't work for tiled layouts - dwm - [fork] customi…
git clone git://src.adamsgaard.dk/dwm
Log
Files
Refs
README
LICENSE
---
commit 1932f8db3cbc01daf55383eed322528b0330083f
parent fcc8bf83ee465dfca3e3adb08afb4e37143d98cb
Author: Anders Damsgaard <[email protected]>
Date: Thu, 18 Jun 2020 09:47:33 +0200
Apply smartborder patch, doesn't work for tiled layouts
Diffstat:
M dwm.c | 71 +++++++++++++++++++----------…
1 file changed, 43 insertions(+), 28 deletions(-)
---
diff --git a/dwm.c b/dwm.c
t@@ -149,7 +149,7 @@ typedef struct {
/* function declarations */
static void applyrules(Client *c);
-static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int inter…
+static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int *bw, …
static void arrange(Monitor *m);
static void arrangemon(Monitor *m);
static void attach(Client *c);
t@@ -194,8 +194,8 @@ static void pop(Client *);
static void propertynotify(XEvent *e);
static void quit(const Arg *arg);
static Monitor *recttomon(int x, int y, int w, int h);
-static void resize(Client *c, int x, int y, int w, int h, int interact);
-static void resizeclient(Client *c, int x, int y, int w, int h);
+static void resize(Client *c, int x, int y, int w, int h, int bw, int interact…
+static void resizeclient(Client *c, int x, int y, int w, int h, int bw);
static void resizemouse(const Arg *arg);
static void restack(Monitor *m);
static void run(void);
t@@ -329,7 +329,7 @@ applyrules(Client *c)
}
int
-applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
+applysizehints(Client *c, int *x, int *y, int *w, int *h, int *bw, int interac…
{
int baseismin;
Monitor *m = c->mon;
t@@ -342,18 +342,18 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h…
*x = sw - WIDTH(c);
if (*y > sh)
*y = sh - HEIGHT(c);
- if (*x + *w + 2 * c->bw < 0)
+ if (*x + *w + 2 * *bw < 0)
*x = 0;
- if (*y + *h + 2 * c->bw < 0)
+ if (*y + *h + 2 * *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)
+ if (*x + *w + 2 * *bw <= m->wx)
*x = m->wx;
- if (*y + *h + 2 * c->bw <= m->wy)
+ if (*y + *h + 2 * *bw <= m->wy)
*y = m->wy;
}
if (*h < bh)
t@@ -391,7 +391,7 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, …
if (c->maxh)
*h = MIN(*h, c->maxh);
}
- return *x != c->x || *y != c->y || *w != c->w || *h != c->h;
+ return *x != c->x || *y != c->y || *w != c->w || *h != c->h || *bw != …
}
void
t@@ -411,9 +411,18 @@ arrange(Monitor *m)
void
arrangemon(Monitor *m)
{
+ Client *c;
+
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
if (m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
+ else
+ /* float case */
+ for (c = selmon->clients; c; c = c->next)
+ if (ISVISIBLE(c) && c->bw == 0)
+ resize(c, c->x, c->y,
+ c->w - 2*borderpx, c->h - 2*borderpx,
+ borderpx, 0);
}
void
t@@ -588,7 +597,7 @@ configurenotify(XEvent *e)
for (m = mons; m; m = m->next) {
for (c = m->clients; c; c = c->next)
if (c->isfullscreen)
- resizeclient(c, m->mx, m->my, …
+ resizeclient(c, m->mx, m->my, …
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by…
}
focus(NULL);
t@@ -1173,7 +1182,7 @@ monocle(Monitor *m)
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, …
+ resize(c, m->wx, m->wy, m->ww, m->wh, 0, 0);
}
void
t@@ -1241,7 +1250,7 @@ movemouse(const Arg *arg)
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
togglefloating(NULL);
if (!selmon->lt[selmon->sellt]->arrange || c->isfloati…
- resize(c, nx, ny, c->w, c->h, 1);
+ resize(c, nx, ny, c->w, c->h, c->bw, 1);
break;
}
} while (ev.type != ButtonRelease);
t@@ -1327,14 +1336,14 @@ recttomon(int x, int y, int w, int h)
}
void
-resize(Client *c, int x, int y, int w, int h, int interact)
+resize(Client *c, int x, int y, int w, int h, int interact, int bw)
{
- if (applysizehints(c, &x, &y, &w, &h, interact))
- resizeclient(c, x, y, w, h);
+ if (applysizehints(c, &x, &y, &w, &h, &bw, interact))
+ resizeclient(c, x, y, w, h, bw);
}
void
-resizeclient(Client *c, int x, int y, int w, int h)
+resizeclient(Client *c, int x, int y, int w, int h, int bw)
{
XWindowChanges wc;
t@@ -1342,7 +1351,8 @@ resizeclient(Client *c, int x, int y, int w, int h)
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;
- wc.border_width = c->bw;
+ c->oldbw = c->bw;
+ c->bw = wc.border_width = bw;
XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, …
configure(c);
XSync(dpy, False);
t@@ -1391,7 +1401,7 @@ resizemouse(const Arg *arg)
togglefloating(NULL);
}
if (!selmon->lt[selmon->sellt]->arrange || c->isfloati…
- resize(c, c->x, c->y, nw, nh, 1);
+ resize(c, c->x, c->y, nw, nh, c->bw, 1);
break;
}
} while (ev.type != ButtonRelease);
t@@ -1538,10 +1548,8 @@ setfullscreen(Client *c, int fullscreen)
PropModeReplace, (unsigned char*)&netatom[NetWMFullscr…
c->isfullscreen = 1;
c->oldstate = c->isfloating;
- c->oldbw = c->bw;
- c->bw = 0;
c->isfloating = 1;
- resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh…
+ resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh…
XRaiseWindow(dpy, c->win);
} else if (!fullscreen && c->isfullscreen){
XChangeProperty(dpy, c->win, netatom[NetWMState], XA_ATOM, 32,
t@@ -1553,7 +1561,7 @@ setfullscreen(Client *c, int fullscreen)
c->y = c->oldy;
c->w = c->oldw;
c->h = c->oldh;
- resizeclient(c, c->x, c->y, c->w, c->h);
+ resizeclient(c, c->x, c->y, c->w, c->h, c->bw);
arrange(c->mon);
}
}
t@@ -1680,7 +1688,7 @@ showhide(Client *c)
/* show clients top down */
XMoveWindow(dpy, c->win, c->x, c->y);
if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && …
- resize(c, c->x, c->y, c->w, c->h, 0);
+ resize(c, c->x, c->y, c->w, c->h, c->bw, 0);
showhide(c->snext);
} else {
/* hide clients bottom up */
t@@ -1734,26 +1742,31 @@ tagmon(const Arg *arg)
void
tile(Monitor *m)
{
- unsigned int i, n, h, mw, my, ty;
+ unsigned int i, n, h, mw, my, ty, bw;
Client *c;
for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
if (n == 0)
return;
+ if (n == 1)
+ bw = 0;
+ else
+ bw = borderpx;
+
if (n > m->nmaster)
mw = m->nmaster ? m->ww * m->mfact : 0;
else
mw = m->ww;
- for (i = 0, my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c…
+ for (i = my = ty = 0, c = nexttiled(m->clients); c; c = nexttiled(c->n…
if (i < m->nmaster) {
h = (m->wh - my) / (MIN(n, m->nmaster) - i);
- resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c-…
+ resize(c, m->wx, m->wy + my, mw - 2*bw, h - 2*bw, bw, …
if (my + HEIGHT(c) < m->wh)
my += HEIGHT(c);
} else {
h = (m->wh - ty) / (n - i);
- resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->b…
+ resize(c, m->wx + mw, m->wy + ty, m->ww - mw - 2*bw, h…
if (ty + HEIGHT(c) < m->wh)
ty += HEIGHT(c);
}
t@@ -1778,7 +1791,9 @@ togglefloating(const Arg *arg)
selmon->sel->isfloating = !selmon->sel->isfloating || selmon->sel->isf…
if (selmon->sel->isfloating)
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
- selmon->sel->w, selmon->sel->h, 0);
+ selmon->sel->w - 2 * (borderpx - selmon->sel->bw),
+ selmon->sel->h - 2 * (borderpx - selmon->sel->bw),
+ borderpx, 0);
arrange(selmon);
}
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.