54 lines
1.6 KiB
Diff
54 lines
1.6 KiB
Diff
diff --git dwm.c dwm.c
|
|
index 0fc328a..4a767bd 100644
|
|
--- dwm.c
|
|
+++ dwm.c
|
|
@@ -206,6 +206,7 @@ static void setup(void);
|
|
static void seturgent(Client *c, int urg);
|
|
static void showhide(Client *c);
|
|
static void sigchld(int unused);
|
|
+static int solitary(Client *c);
|
|
static void spawn(const Arg *arg);
|
|
static void tag(const Arg *arg);
|
|
static void tagmon(const Arg *arg);
|
|
@@ -802,7 +803,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);
|
|
@@ -1288,6 +1293,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);
|
|
@@ -1642,6 +1652,15 @@ sigchld(int unused)
|
|
while (0 < waitpid(-1, NULL, WNOHANG));
|
|
}
|
|
|
|
+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)
|
|
{
|