[wiki] [sites] Rewrite of better-borders patch || Eric Pruitt

From: <git_AT_suckless.org>
Date: Sun, 27 Dec 2015 23:04:52 +0100

commit b40f5430a3504a24823655a8e261ef899883766f
Author: Eric Pruitt <eric.pruitt_AT_gmail.com>
Date: Sun Dec 27 14:03:18 2015 -0800

    Rewrite of better-borders patch

diff --git a/dwm.suckless.org/patches/better-borders.md b/dwm.suckless.org/patches/better-borders.md
index 4009a9b..a0d89eb 100644
--- a/dwm.suckless.org/patches/better-borders.md
+++ b/dwm.suckless.org/patches/better-borders.md
_AT_@ -12,10 +12,13 @@ as the monitor and marks them full-screen even if their X properties indicate
 otherwise. This eliminates nuisance borders that appear with some games and
 applications while in full-screen mode.
 
+Thanks to Alesandar Metodiev for reporting a bug that lead to the patch being
+rewritten.
+
 Download
 --------
 
- * [dwm-6.1-better-borders.diff](dwm-6.1-better-borders.diff) (2014-07-13)
+ * [dwm-6.1-better-borders.diff](dwm-6.1-better-borders.diff) (2015-12-27)
 
 Author
 ------
diff --git a/dwm.suckless.org/patches/dwm-6.1-better-borders.diff b/dwm.suckless.org/patches/dwm-6.1-better-borders.diff
index b305ebd..9a6bf19 100644
--- a/dwm.suckless.org/patches/dwm-6.1-better-borders.diff
+++ b/dwm.suckless.org/patches/dwm-6.1-better-borders.diff
_AT_@ -1,77 +1,66 @@
+Author: Eric Pruitt, https://github.com/ericpruitt/
+Description: This patch makes dwm remove borders when only one, non-floating
+window is visible. Additionally, any windows that are the same size as the
+monitor are considered full-screen and their borders removed accordingly.
+
 diff --git a/dwm.c b/dwm.c
-index 0362114..5c40060 100644
+index 0362114..03fddb6 100644
 --- a/dwm.c
 +++ b/dwm.c
-_AT_@ -310,6 +310,34 @@ applyrules(Client *c)
- c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
- }
-
-+void
-+adjustborders(Monitor *m) {
-+ Client *c, *l = NULL;
-+ int visible = 0;
-+
-+ for(c = m->clients; c; c = c->next) {
-+ if (ISVISIBLE(c) && !c->isfloating && m->lt[m->sellt]->arrange) {
-+ if (m->lt[m->sellt]->arrange == monocle) {
-+ visible = 1;
-+ c->oldbw = c->bw;
-+ c->bw = 0;
-+ } else {
-+ visible++;
-+ c->oldbw = c->bw;
+_AT_@ -393,9 +393,24 @@ arrange(Monitor *m)
+ void
+ arrangemon(Monitor *m)
+ {
++ int n = 0;
++ 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);
++ for (n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
++ if (n > 1 || !m->lt[m->sellt]->arrange) {
++ for (c = m->clients; c; c = c->next) {
++ if (ISVISIBLE(c) && (!m->lt[m->sellt]->arrange || !c->isfloating) && (c->bw != borderpx)) {
++ c->oldbw = c->oldbw;
 + c->bw = borderpx;
++ resizeclient(c, m->wx, m->wy, m->ww - (2 * c->bw), m->wh - (2 * c->bw));
 + }
-+
-+ l = c;
 + }
++ if (m->lt[m->sellt]->arrange) {
++ m->lt[m->sellt]->arrange(m);
++ }
++ } else {
++ monocle(m);
 + }
-+
-+ if (l && visible == 1 && l->bw) {
-+ l->oldbw = l->bw;
-+ l->bw = 0;
-+ resizeclient(l, l->x, l->y, l->w, l->h);
-+ }
-+}
-+
- int
- applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
- {
-_AT_@ -379,10 +407,13 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact)
+ }
+
  void
- arrange(Monitor *m)
+_AT_@ -1117,16 +1132,25 @@ maprequest(XEvent *e)
+ void
+ monocle(Monitor *m)
  {
-- if (m)
-+ if (m) {
-+ adjustborders(m);
- showhide(m->stack);
-- else for (m = mons; m; m = m->next)
-+ } else for (m = mons; m; m = m->next) {
-+ adjustborders(m);
- showhide(m->stack);
-+ }
- if (m) {
- arrangemon(m);
- restack(m);
-_AT_@ -1061,7 +1092,20 @@ manage(Window w, XWindowAttributes *wa)
- /* only fix client y-offset, if the client center might cover the bar */
- c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx)
- && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my);
-- c->bw = borderpx;
-+
-+ updatewindowtype(c);
-+ if (c->isfloating) {
-+ c->bw = c->isfullscreen ? 0 : borderpx;
-+ } else {
-+ c->bw = 0;
-+ for(t = c->mon->clients; t; t = c->next) {
-+ if (!t->isfloating && c != t && c->tags & t->tags) {
-+ c->bw = borderpx;
-+ break;
-+ }
+- unsigned int n = 0;
++ unsigned int n = 0, r = 0;
+ Client *c;
+
+ for (c = m->clients; c; c = c->next)
+ if (ISVISIBLE(c))
+ n++;
+- if (n > 0) /* override layout symbol */
++ if (n > 0 && m->lt[m->sellt]->arrange == monocle) /* 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, 0);
++ for(c = nexttiled(m->clients); c; c = nexttiled(c->next)) {
++ if (c->bw) {
++ c->oldbw = c->bw;
++ c->bw = 0;
++ r = 1;
++ }
++ resize(c, m->wx, m->wy, m->ww - (2 * c->bw), m->wh - (2 * c->bw), False);
++ if(r) {
++ resizeclient(c, m->wx, m->wy, m->ww - (2 * c->bw), m->wh - (2 * c->bw));
 + }
-+ adjustborders(c->mon);
 + }
+ }
  
- wc.border_width = c->bw;
- XConfigureWindow(dpy, w, CWBorderWidth, &wc);
+ void
Received on Sun Dec 27 2015 - 23:04:52 CET

This archive was generated by hypermail 2.3.0 : Sun Dec 27 2015 - 23:12:13 CET