diff options
Diffstat (limited to 'x11-wm/dwm/files/08_noborderselflickerfix.diff')
| -rw-r--r-- | x11-wm/dwm/files/08_noborderselflickerfix.diff | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/x11-wm/dwm/files/08_noborderselflickerfix.diff b/x11-wm/dwm/files/08_noborderselflickerfix.diff new file mode 100644 index 0000000..5a3008a --- /dev/null +++ b/x11-wm/dwm/files/08_noborderselflickerfix.diff @@ -0,0 +1,53 @@ +diff --git i/dwm.c w/dwm.c +index 4150456..4c60342 100644 +--- i/dwm.c ++++ w/dwm.c +@@ -221,6 +221,7 @@ static void setmfact(const Arg *arg); + static void setup(void); + static void seturgent(Client *c, int urg); + static void showhide(Client *c); ++static int solitary(Client *c); + static void spawn(const Arg *arg); + static void tag(const Arg *arg); + static void tagmon(const Arg *arg); +@@ -889,7 +890,11 @@ focus(Client *c) + detachstack(c); + attachstack(c); + grabbuttons(c, 1); +- XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); ++ /* Avoid flickering when another client appears and the border ++ * is restored */ ++ if (!solitary(c)) { ++ XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); ++ } + setfocus(c); + } else { + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); +@@ -1500,6 +1505,11 @@ resizeclient(Client *c, int x, int y, int w, int h) + c->oldw = c->w; c->w = wc.width = w; + c->oldh = c->h; c->h = wc.height = h; + wc.border_width = c->bw; ++ if (solitary(c)) { ++ c->w = wc.width += c->bw * 2; ++ c->h = wc.height += c->bw * 2; ++ wc.border_width = 0; ++ } + XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc); + configure(c); + XSync(dpy, False); +@@ -1852,6 +1862,15 @@ showhide(Client *c) + } + } + ++int ++solitary(Client *c) ++{ ++ return ((nexttiled(c->mon->clients) == c && !nexttiled(c->next)) ++ || &monocle == c->mon->lt[c->mon->sellt]->arrange) ++ && !c->isfullscreen && !c->isfloating ++ && NULL != c->mon->lt[c->mon->sellt]->arrange; ++} ++ + void + spawn(const Arg *arg) + { |
