mirror of
https://github.com/bakkeby/patches
synced 2024-11-13 07:10:31 +00:00
swallow: better fullscreen support ref. #85
This commit is contained in:
parent
8bbfb678b5
commit
e88828d5ae
@ -1,28 +1,29 @@
|
|||||||
From e167b026b6dac825e4d5ad108553674ca7380ccb Mon Sep 17 00:00:00 2001
|
From 675be29a39db061dcd405f575d849c05af053a14 Mon Sep 17 00:00:00 2001
|
||||||
From: Bakkeby <bakkeby@gmail.com>
|
From: Bakkeby <bakkeby@gmail.com>
|
||||||
Date: Wed, 26 Jun 2024 23:04:00 +0200
|
Date: Wed, 26 Jun 2024 23:04:00 +0200
|
||||||
Subject: [PATCH] Alternative swallow patch that replaces clients instead of
|
Subject: [PATCH] Alternative swallow patch that replaces clients instead of
|
||||||
swapping windows offering better resize hints
|
swapping windows offering better resize hints
|
||||||
|
|
||||||
---
|
---
|
||||||
config.def.h | 9 +-
|
config.def.h | 10 +-
|
||||||
config.mk | 6 +-
|
config.mk | 6 +-
|
||||||
dwm.c | 300 +++++++++++++++++++++++++++++++++++++++++++++++----
|
dwm.c | 317 +++++++++++++++++++++++++++++++++++++++++++++++----
|
||||||
3 files changed, 288 insertions(+), 27 deletions(-)
|
3 files changed, 306 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
diff --git a/config.def.h b/config.def.h
|
||||||
index 9efa774..5dc3f22 100644
|
index 9efa774..776d579 100644
|
||||||
--- a/config.def.h
|
--- a/config.def.h
|
||||||
+++ b/config.def.h
|
+++ b/config.def.h
|
||||||
@@ -3,6 +3,7 @@
|
@@ -3,6 +3,8 @@
|
||||||
/* appearance */
|
/* appearance */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
static const unsigned int snap = 32; /* snap pixel */
|
static const unsigned int snap = 32; /* snap pixel */
|
||||||
+static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
|
+static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
|
||||||
|
+static const int swterminheritfs = 1; /* 1 terminal inherits fullscreen on unswallow, 0 otherwise */
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
static const int showbar = 1; /* 0 means no bar */
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
static const int topbar = 1; /* 0 means bottom bar */
|
||||||
static const char *fonts[] = { "monospace:size=10" };
|
static const char *fonts[] = { "monospace:size=10" };
|
||||||
@@ -26,9 +27,11 @@ static const Rule rules[] = {
|
@@ -26,9 +28,11 @@ static const Rule rules[] = {
|
||||||
* WM_CLASS(STRING) = instance, class
|
* WM_CLASS(STRING) = instance, class
|
||||||
* WM_NAME(STRING) = title
|
* WM_NAME(STRING) = title
|
||||||
*/
|
*/
|
||||||
@ -58,7 +59,7 @@ index 8efca9a..fc05587 100644
|
|||||||
# flags
|
# flags
|
||||||
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
|
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
|
||||||
diff --git a/dwm.c b/dwm.c
|
diff --git a/dwm.c b/dwm.c
|
||||||
index f1d86b2..7aef964 100644
|
index f1d86b2..4ae052f 100644
|
||||||
--- a/dwm.c
|
--- a/dwm.c
|
||||||
+++ b/dwm.c
|
+++ b/dwm.c
|
||||||
@@ -40,6 +40,12 @@
|
@@ -40,6 +40,12 @@
|
||||||
@ -256,7 +257,7 @@ index f1d86b2..7aef964 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1275,6 +1327,46 @@ recttomon(int x, int y, int w, int h)
|
@@ -1275,6 +1327,66 @@ recttomon(int x, int y, int w, int h)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,21 +269,20 @@ index f1d86b2..7aef964 100644
|
|||||||
+
|
+
|
||||||
+ new->mon = mon;
|
+ new->mon = mon;
|
||||||
+ new->tags = old->tags;
|
+ new->tags = old->tags;
|
||||||
+ new->isfloating = old->isfloating;
|
|
||||||
+
|
+
|
||||||
+ new->next = old->next;
|
+ new->next = old->next;
|
||||||
+ new->snext = old->snext;
|
+ new->snext = old->snext;
|
||||||
+
|
+
|
||||||
+ if (old == mon->clients)
|
+ if (old == mon->clients) {
|
||||||
+ mon->clients = new;
|
+ mon->clients = new;
|
||||||
+ else {
|
+ } else {
|
||||||
+ for (c = mon->clients; c && c->next != old; c = c->next);
|
+ for (c = mon->clients; c && c->next != old; c = c->next);
|
||||||
+ c->next = new;
|
+ c->next = new;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ if (old == mon->stack)
|
+ if (old == mon->stack) {
|
||||||
+ mon->stack = new;
|
+ mon->stack = new;
|
||||||
+ else {
|
+ } else {
|
||||||
+ for (c = mon->stack; c && c->snext != old; c = c->snext);
|
+ for (c = mon->stack; c && c->snext != old; c = c->snext);
|
||||||
+ c->snext = new;
|
+ c->snext = new;
|
||||||
+ }
|
+ }
|
||||||
@ -290,20 +290,41 @@ index f1d86b2..7aef964 100644
|
|||||||
+ old->next = NULL;
|
+ old->next = NULL;
|
||||||
+ old->snext = NULL;
|
+ old->snext = NULL;
|
||||||
+
|
+
|
||||||
|
+ if (!swterminheritfs && new->isterminal && !new->isfullscreen && old->isfullscreen) {
|
||||||
|
+ /* Do not allow a non-fullscreen terminal to inherit the fullscreen property of
|
||||||
|
+ * a windoww when unswallowed */
|
||||||
|
+ new->x = old->oldx;
|
||||||
|
+ new->y = old->oldy;
|
||||||
|
+ new->w = old->oldw;
|
||||||
|
+ new->h = old->oldh;
|
||||||
|
+ new->isfloating = old->oldstate;
|
||||||
|
+ } else {
|
||||||
|
+ setfullscreen(new, old->isfullscreen);
|
||||||
|
+ new->x = old->x;
|
||||||
|
+ new->y = old->y;
|
||||||
|
+ new->w = old->w;
|
||||||
|
+ new->h = old->h;
|
||||||
|
+ new->oldx = old->oldx;
|
||||||
|
+ new->oldy = old->oldy;
|
||||||
|
+ new->oldw = old->oldw;
|
||||||
|
+ new->oldh = old->oldh;
|
||||||
|
+ new->oldbw = old->oldbw;
|
||||||
|
+ new->bw = old->bw;
|
||||||
|
+ new->isfloating = old->isfloating;
|
||||||
|
+ new->oldstate = old->oldstate;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ XMoveWindow(dpy, old->win, WIDTH(old) * -2, old->y);
|
+ XMoveWindow(dpy, old->win, WIDTH(old) * -2, old->y);
|
||||||
+
|
+
|
||||||
+ if (ISVISIBLE(new) && !new->isfullscreen) {
|
+ if (ISVISIBLE(new) && new->isfloating && !new->isfullscreen) {
|
||||||
+ if (new->isfloating)
|
+ resize(new, new->x, new->y, new->w, new->h, 0);
|
||||||
+ resize(new, old->x, old->y, new->w, new->h, 0);
|
|
||||||
+ else
|
|
||||||
+ resize(new, old->x, old->y, old->w, old->h, 0);
|
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
void
|
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)
|
||||||
{
|
{
|
||||||
@@ -1666,6 +1758,31 @@ spawn(const Arg *arg)
|
@@ -1666,6 +1778,28 @@ spawn(const Arg *arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,12 +333,9 @@ index f1d86b2..7aef964 100644
|
|||||||
+{
|
+{
|
||||||
+ if (c->noswallow || c->isterminal)
|
+ if (c->noswallow || c->isterminal)
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+ if (!swallowfloating && c->isfloating)
|
+ if (!swallowfloating && (c->isfullscreen ? c->oldstate : c->isfloating))
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+
|
+
|
||||||
+ if (t->isfullscreen)
|
|
||||||
+ setfullscreen(c, 1);
|
|
||||||
+
|
|
||||||
+ replaceclient(t, c);
|
+ replaceclient(t, c);
|
||||||
+ c->ignorecfgreqpos = 1;
|
+ c->ignorecfgreqpos = 1;
|
||||||
+ c->swallowing = t;
|
+ c->swallowing = t;
|
||||||
@ -335,7 +353,7 @@ index f1d86b2..7aef964 100644
|
|||||||
void
|
void
|
||||||
tag(const Arg *arg)
|
tag(const Arg *arg)
|
||||||
{
|
{
|
||||||
@@ -1778,9 +1895,17 @@ unfocus(Client *c, int setfocus)
|
@@ -1778,9 +1912,17 @@ unfocus(Client *c, int setfocus)
|
||||||
void
|
void
|
||||||
unmanage(Client *c, int destroyed)
|
unmanage(Client *c, int destroyed)
|
||||||
{
|
{
|
||||||
@ -353,7 +371,7 @@ index f1d86b2..7aef964 100644
|
|||||||
detach(c);
|
detach(c);
|
||||||
detachstack(c);
|
detachstack(c);
|
||||||
if (!destroyed) {
|
if (!destroyed) {
|
||||||
@@ -2062,6 +2187,133 @@ view(const Arg *arg)
|
@@ -2062,6 +2204,133 @@ view(const Arg *arg)
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,7 +505,7 @@ index f1d86b2..7aef964 100644
|
|||||||
Client *
|
Client *
|
||||||
wintoclient(Window w)
|
wintoclient(Window w)
|
||||||
{
|
{
|
||||||
@@ -2151,10 +2403,12 @@ main(int argc, char *argv[])
|
@@ -2151,10 +2420,12 @@ main(int argc, char *argv[])
|
||||||
fputs("warning: no locale support\n", stderr);
|
fputs("warning: no locale support\n", stderr);
|
||||||
if (!(dpy = XOpenDisplay(NULL)))
|
if (!(dpy = XOpenDisplay(NULL)))
|
||||||
die("dwm: cannot open display");
|
die("dwm: cannot open display");
|
||||||
@ -502,5 +520,5 @@ index f1d86b2..7aef964 100644
|
|||||||
#endif /* __OpenBSD__ */
|
#endif /* __OpenBSD__ */
|
||||||
scan();
|
scan();
|
||||||
--
|
--
|
||||||
2.45.2
|
2.46.0
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
From 1418a2c1fbb8e8ed8347a73f2022cf8cb1d5f091 Mon Sep 17 00:00:00 2001
|
From 58dfd781f3c7caf64f8dd35e49bf386ad0351ce0 Mon Sep 17 00:00:00 2001
|
||||||
From: Bakkeby <bakkeby@gmail.com>
|
From: Bakkeby <bakkeby@gmail.com>
|
||||||
Date: Mon, 1 Jul 2024 23:31:40 +0200
|
Date: Mon, 1 Jul 2024 23:31:40 +0200
|
||||||
Subject: [PATCH 2/2] Adding riodraw on top of swallow
|
Subject: [PATCH 3/3] Adding riodraw on top of swallow
|
||||||
|
|
||||||
---
|
---
|
||||||
config.def.h | 8 ++++
|
config.def.h | 8 ++++
|
||||||
@ -9,11 +9,11 @@ Subject: [PATCH 2/2] Adding riodraw on top of swallow
|
|||||||
2 files changed, 135 insertions(+), 1 deletion(-)
|
2 files changed, 135 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
diff --git a/config.def.h b/config.def.h
|
||||||
index 5dc3f22..664a1ad 100644
|
index 776d579..37931c5 100644
|
||||||
--- a/config.def.h
|
--- a/config.def.h
|
||||||
+++ b/config.def.h
|
+++ b/config.def.h
|
||||||
@@ -6,6 +6,12 @@ static const unsigned int snap = 32; /* snap pixel */
|
@@ -7,6 +7,12 @@ static const int swallowfloating = 0; /* 1 means swallow floating wind
|
||||||
static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
|
static const int swterminheritfs = 1; /* 1 terminal inherits fullscreen on unswallow, 0 otherwise */
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
static const int showbar = 1; /* 0 means no bar */
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
static const int topbar = 1; /* 0 means bottom bar */
|
||||||
+static const char slopspawnstyle[] = "-t 0 -c 0.92,0.85,0.69,0.3 -o"; /* do NOT define -f (format) here */
|
+static const char slopspawnstyle[] = "-t 0 -c 0.92,0.85,0.69,0.3 -o"; /* do NOT define -f (format) here */
|
||||||
@ -25,7 +25,7 @@ index 5dc3f22..664a1ad 100644
|
|||||||
static const char *fonts[] = { "monospace:size=10" };
|
static const char *fonts[] = { "monospace:size=10" };
|
||||||
static const char dmenufont[] = "monospace:size=10";
|
static const char dmenufont[] = "monospace:size=10";
|
||||||
static const char col_gray1[] = "#222222";
|
static const char col_gray1[] = "#222222";
|
||||||
@@ -67,6 +73,8 @@ static const Key keys[] = {
|
@@ -68,6 +74,8 @@ static const Key keys[] = {
|
||||||
/* modifier key function argument */
|
/* modifier key function argument */
|
||||||
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||||
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
||||||
@ -35,7 +35,7 @@ index 5dc3f22..664a1ad 100644
|
|||||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||||
diff --git a/dwm.c b/dwm.c
|
diff --git a/dwm.c b/dwm.c
|
||||||
index 7aef964..5f2162e 100644
|
index afa3ca2..8818af7 100644
|
||||||
--- a/dwm.c
|
--- a/dwm.c
|
||||||
+++ b/dwm.c
|
+++ b/dwm.c
|
||||||
@@ -205,6 +205,10 @@ static void resize(Client *c, int x, int y, int w, int h, int interact);
|
@@ -205,6 +205,10 @@ static void resize(Client *c, int x, int y, int w, int h, int interact);
|
||||||
@ -85,7 +85,7 @@ index 7aef964..5f2162e 100644
|
|||||||
arrange(c->mon);
|
arrange(c->mon);
|
||||||
XMapWindow(dpy, c->win);
|
XMapWindow(dpy, c->win);
|
||||||
if (focusclient)
|
if (focusclient)
|
||||||
@@ -1471,6 +1490,105 @@ restack(Monitor *m)
|
@@ -1492,6 +1511,105 @@ restack(Monitor *m)
|
||||||
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
|
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,7 +191,7 @@ index 7aef964..5f2162e 100644
|
|||||||
void
|
void
|
||||||
run(void)
|
run(void)
|
||||||
{
|
{
|
||||||
@@ -1739,11 +1857,18 @@ showhide(Client *c)
|
@@ -1760,11 +1878,18 @@ showhide(Client *c)
|
||||||
void
|
void
|
||||||
spawn(const Arg *arg)
|
spawn(const Arg *arg)
|
||||||
{
|
{
|
||||||
@ -211,7 +211,7 @@ index 7aef964..5f2162e 100644
|
|||||||
if (dpy)
|
if (dpy)
|
||||||
close(ConnectionNumber(dpy));
|
close(ConnectionNumber(dpy));
|
||||||
setsid();
|
setsid();
|
||||||
@@ -1756,6 +1881,7 @@ spawn(const Arg *arg)
|
@@ -1777,6 +1902,7 @@ spawn(const Arg *arg)
|
||||||
execvp(((char **)arg->v)[0], (char **)arg->v);
|
execvp(((char **)arg->v)[0], (char **)arg->v);
|
||||||
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
|
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
|
||||||
}
|
}
|
||||||
@ -220,5 +220,5 @@ index 7aef964..5f2162e 100644
|
|||||||
|
|
||||||
int
|
int
|
||||||
--
|
--
|
||||||
2.45.2
|
2.46.0
|
||||||
|
|
||||||
|
@ -1,28 +1,29 @@
|
|||||||
From e167b026b6dac825e4d5ad108553674ca7380ccb Mon Sep 17 00:00:00 2001
|
From 675be29a39db061dcd405f575d849c05af053a14 Mon Sep 17 00:00:00 2001
|
||||||
From: Bakkeby <bakkeby@gmail.com>
|
From: Bakkeby <bakkeby@gmail.com>
|
||||||
Date: Wed, 26 Jun 2024 23:04:00 +0200
|
Date: Wed, 26 Jun 2024 23:04:00 +0200
|
||||||
Subject: [PATCH 1/2] Alternative swallow patch that replaces clients instead
|
Subject: [PATCH 1/3] Alternative swallow patch that replaces clients instead
|
||||||
of swapping windows offering better resize hints
|
of swapping windows offering better resize hints
|
||||||
|
|
||||||
---
|
---
|
||||||
config.def.h | 9 +-
|
config.def.h | 10 +-
|
||||||
config.mk | 6 +-
|
config.mk | 6 +-
|
||||||
dwm.c | 300 +++++++++++++++++++++++++++++++++++++++++++++++----
|
dwm.c | 317 +++++++++++++++++++++++++++++++++++++++++++++++----
|
||||||
3 files changed, 288 insertions(+), 27 deletions(-)
|
3 files changed, 306 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
diff --git a/config.def.h b/config.def.h
|
||||||
index 9efa774..5dc3f22 100644
|
index 9efa774..776d579 100644
|
||||||
--- a/config.def.h
|
--- a/config.def.h
|
||||||
+++ b/config.def.h
|
+++ b/config.def.h
|
||||||
@@ -3,6 +3,7 @@
|
@@ -3,6 +3,8 @@
|
||||||
/* appearance */
|
/* appearance */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
static const unsigned int snap = 32; /* snap pixel */
|
static const unsigned int snap = 32; /* snap pixel */
|
||||||
+static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
|
+static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
|
||||||
|
+static const int swterminheritfs = 1; /* 1 terminal inherits fullscreen on unswallow, 0 otherwise */
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
static const int showbar = 1; /* 0 means no bar */
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
static const int topbar = 1; /* 0 means bottom bar */
|
||||||
static const char *fonts[] = { "monospace:size=10" };
|
static const char *fonts[] = { "monospace:size=10" };
|
||||||
@@ -26,9 +27,11 @@ static const Rule rules[] = {
|
@@ -26,9 +28,11 @@ static const Rule rules[] = {
|
||||||
* WM_CLASS(STRING) = instance, class
|
* WM_CLASS(STRING) = instance, class
|
||||||
* WM_NAME(STRING) = title
|
* WM_NAME(STRING) = title
|
||||||
*/
|
*/
|
||||||
@ -58,7 +59,7 @@ index 8efca9a..fc05587 100644
|
|||||||
# flags
|
# flags
|
||||||
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
|
CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
|
||||||
diff --git a/dwm.c b/dwm.c
|
diff --git a/dwm.c b/dwm.c
|
||||||
index f1d86b2..7aef964 100644
|
index f1d86b2..4ae052f 100644
|
||||||
--- a/dwm.c
|
--- a/dwm.c
|
||||||
+++ b/dwm.c
|
+++ b/dwm.c
|
||||||
@@ -40,6 +40,12 @@
|
@@ -40,6 +40,12 @@
|
||||||
@ -256,7 +257,7 @@ index f1d86b2..7aef964 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1275,6 +1327,46 @@ recttomon(int x, int y, int w, int h)
|
@@ -1275,6 +1327,66 @@ recttomon(int x, int y, int w, int h)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,21 +269,20 @@ index f1d86b2..7aef964 100644
|
|||||||
+
|
+
|
||||||
+ new->mon = mon;
|
+ new->mon = mon;
|
||||||
+ new->tags = old->tags;
|
+ new->tags = old->tags;
|
||||||
+ new->isfloating = old->isfloating;
|
|
||||||
+
|
+
|
||||||
+ new->next = old->next;
|
+ new->next = old->next;
|
||||||
+ new->snext = old->snext;
|
+ new->snext = old->snext;
|
||||||
+
|
+
|
||||||
+ if (old == mon->clients)
|
+ if (old == mon->clients) {
|
||||||
+ mon->clients = new;
|
+ mon->clients = new;
|
||||||
+ else {
|
+ } else {
|
||||||
+ for (c = mon->clients; c && c->next != old; c = c->next);
|
+ for (c = mon->clients; c && c->next != old; c = c->next);
|
||||||
+ c->next = new;
|
+ c->next = new;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ if (old == mon->stack)
|
+ if (old == mon->stack) {
|
||||||
+ mon->stack = new;
|
+ mon->stack = new;
|
||||||
+ else {
|
+ } else {
|
||||||
+ for (c = mon->stack; c && c->snext != old; c = c->snext);
|
+ for (c = mon->stack; c && c->snext != old; c = c->snext);
|
||||||
+ c->snext = new;
|
+ c->snext = new;
|
||||||
+ }
|
+ }
|
||||||
@ -290,20 +290,41 @@ index f1d86b2..7aef964 100644
|
|||||||
+ old->next = NULL;
|
+ old->next = NULL;
|
||||||
+ old->snext = NULL;
|
+ old->snext = NULL;
|
||||||
+
|
+
|
||||||
|
+ if (!swterminheritfs && new->isterminal && !new->isfullscreen && old->isfullscreen) {
|
||||||
|
+ /* Do not allow a non-fullscreen terminal to inherit the fullscreen property of
|
||||||
|
+ * a windoww when unswallowed */
|
||||||
|
+ new->x = old->oldx;
|
||||||
|
+ new->y = old->oldy;
|
||||||
|
+ new->w = old->oldw;
|
||||||
|
+ new->h = old->oldh;
|
||||||
|
+ new->isfloating = old->oldstate;
|
||||||
|
+ } else {
|
||||||
|
+ setfullscreen(new, old->isfullscreen);
|
||||||
|
+ new->x = old->x;
|
||||||
|
+ new->y = old->y;
|
||||||
|
+ new->w = old->w;
|
||||||
|
+ new->h = old->h;
|
||||||
|
+ new->oldx = old->oldx;
|
||||||
|
+ new->oldy = old->oldy;
|
||||||
|
+ new->oldw = old->oldw;
|
||||||
|
+ new->oldh = old->oldh;
|
||||||
|
+ new->oldbw = old->oldbw;
|
||||||
|
+ new->bw = old->bw;
|
||||||
|
+ new->isfloating = old->isfloating;
|
||||||
|
+ new->oldstate = old->oldstate;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ XMoveWindow(dpy, old->win, WIDTH(old) * -2, old->y);
|
+ XMoveWindow(dpy, old->win, WIDTH(old) * -2, old->y);
|
||||||
+
|
+
|
||||||
+ if (ISVISIBLE(new) && !new->isfullscreen) {
|
+ if (ISVISIBLE(new) && new->isfloating && !new->isfullscreen) {
|
||||||
+ if (new->isfloating)
|
+ resize(new, new->x, new->y, new->w, new->h, 0);
|
||||||
+ resize(new, old->x, old->y, new->w, new->h, 0);
|
|
||||||
+ else
|
|
||||||
+ resize(new, old->x, old->y, old->w, old->h, 0);
|
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
void
|
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)
|
||||||
{
|
{
|
||||||
@@ -1666,6 +1758,31 @@ spawn(const Arg *arg)
|
@@ -1666,6 +1778,28 @@ spawn(const Arg *arg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,12 +333,9 @@ index f1d86b2..7aef964 100644
|
|||||||
+{
|
+{
|
||||||
+ if (c->noswallow || c->isterminal)
|
+ if (c->noswallow || c->isterminal)
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+ if (!swallowfloating && c->isfloating)
|
+ if (!swallowfloating && (c->isfullscreen ? c->oldstate : c->isfloating))
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+
|
+
|
||||||
+ if (t->isfullscreen)
|
|
||||||
+ setfullscreen(c, 1);
|
|
||||||
+
|
|
||||||
+ replaceclient(t, c);
|
+ replaceclient(t, c);
|
||||||
+ c->ignorecfgreqpos = 1;
|
+ c->ignorecfgreqpos = 1;
|
||||||
+ c->swallowing = t;
|
+ c->swallowing = t;
|
||||||
@ -335,7 +353,7 @@ index f1d86b2..7aef964 100644
|
|||||||
void
|
void
|
||||||
tag(const Arg *arg)
|
tag(const Arg *arg)
|
||||||
{
|
{
|
||||||
@@ -1778,9 +1895,17 @@ unfocus(Client *c, int setfocus)
|
@@ -1778,9 +1912,17 @@ unfocus(Client *c, int setfocus)
|
||||||
void
|
void
|
||||||
unmanage(Client *c, int destroyed)
|
unmanage(Client *c, int destroyed)
|
||||||
{
|
{
|
||||||
@ -353,7 +371,7 @@ index f1d86b2..7aef964 100644
|
|||||||
detach(c);
|
detach(c);
|
||||||
detachstack(c);
|
detachstack(c);
|
||||||
if (!destroyed) {
|
if (!destroyed) {
|
||||||
@@ -2062,6 +2187,133 @@ view(const Arg *arg)
|
@@ -2062,6 +2204,133 @@ view(const Arg *arg)
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -487,7 +505,7 @@ index f1d86b2..7aef964 100644
|
|||||||
Client *
|
Client *
|
||||||
wintoclient(Window w)
|
wintoclient(Window w)
|
||||||
{
|
{
|
||||||
@@ -2151,10 +2403,12 @@ main(int argc, char *argv[])
|
@@ -2151,10 +2420,12 @@ main(int argc, char *argv[])
|
||||||
fputs("warning: no locale support\n", stderr);
|
fputs("warning: no locale support\n", stderr);
|
||||||
if (!(dpy = XOpenDisplay(NULL)))
|
if (!(dpy = XOpenDisplay(NULL)))
|
||||||
die("dwm: cannot open display");
|
die("dwm: cannot open display");
|
||||||
@ -502,13 +520,47 @@ index f1d86b2..7aef964 100644
|
|||||||
#endif /* __OpenBSD__ */
|
#endif /* __OpenBSD__ */
|
||||||
scan();
|
scan();
|
||||||
--
|
--
|
||||||
2.45.2
|
2.46.0
|
||||||
|
|
||||||
|
|
||||||
From 1418a2c1fbb8e8ed8347a73f2022cf8cb1d5f091 Mon Sep 17 00:00:00 2001
|
From f01c8e682d11cf4726a27c295bec214427555ff2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bakkeby <bakkeby@gmail.com>
|
||||||
|
Date: Wed, 26 Jun 2024 23:04:00 +0200
|
||||||
|
Subject: [PATCH 2/3] Alternative swallow patch that replaces clients instead
|
||||||
|
of swapping windows offering better resize hints
|
||||||
|
|
||||||
|
---
|
||||||
|
dwm.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/dwm.c b/dwm.c
|
||||||
|
index 4ae052f..afa3ca2 100644
|
||||||
|
--- a/dwm.c
|
||||||
|
+++ b/dwm.c
|
||||||
|
@@ -1339,6 +1339,7 @@ replaceclient(Client *old, Client *new)
|
||||||
|
new->next = old->next;
|
||||||
|
new->snext = old->snext;
|
||||||
|
|
||||||
|
+
|
||||||
|
if (old == mon->clients) {
|
||||||
|
mon->clients = new;
|
||||||
|
} else {
|
||||||
|
@@ -1783,6 +1784,7 @@ swallow(Client *t, Client *c)
|
||||||
|
{
|
||||||
|
if (c->noswallow || c->isterminal)
|
||||||
|
return 0;
|
||||||
|
+
|
||||||
|
if (!swallowfloating && (c->isfullscreen ? c->oldstate : c->isfloating))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.46.0
|
||||||
|
|
||||||
|
|
||||||
|
From 58dfd781f3c7caf64f8dd35e49bf386ad0351ce0 Mon Sep 17 00:00:00 2001
|
||||||
From: Bakkeby <bakkeby@gmail.com>
|
From: Bakkeby <bakkeby@gmail.com>
|
||||||
Date: Mon, 1 Jul 2024 23:31:40 +0200
|
Date: Mon, 1 Jul 2024 23:31:40 +0200
|
||||||
Subject: [PATCH 2/2] Adding riodraw on top of swallow
|
Subject: [PATCH 3/3] Adding riodraw on top of swallow
|
||||||
|
|
||||||
---
|
---
|
||||||
config.def.h | 8 ++++
|
config.def.h | 8 ++++
|
||||||
@ -516,11 +568,11 @@ Subject: [PATCH 2/2] Adding riodraw on top of swallow
|
|||||||
2 files changed, 135 insertions(+), 1 deletion(-)
|
2 files changed, 135 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/config.def.h b/config.def.h
|
diff --git a/config.def.h b/config.def.h
|
||||||
index 5dc3f22..664a1ad 100644
|
index 776d579..37931c5 100644
|
||||||
--- a/config.def.h
|
--- a/config.def.h
|
||||||
+++ b/config.def.h
|
+++ b/config.def.h
|
||||||
@@ -6,6 +6,12 @@ static const unsigned int snap = 32; /* snap pixel */
|
@@ -7,6 +7,12 @@ static const int swallowfloating = 0; /* 1 means swallow floating wind
|
||||||
static const int swallowfloating = 0; /* 1 means swallow floating windows by default */
|
static const int swterminheritfs = 1; /* 1 terminal inherits fullscreen on unswallow, 0 otherwise */
|
||||||
static const int showbar = 1; /* 0 means no bar */
|
static const int showbar = 1; /* 0 means no bar */
|
||||||
static const int topbar = 1; /* 0 means bottom bar */
|
static const int topbar = 1; /* 0 means bottom bar */
|
||||||
+static const char slopspawnstyle[] = "-t 0 -c 0.92,0.85,0.69,0.3 -o"; /* do NOT define -f (format) here */
|
+static const char slopspawnstyle[] = "-t 0 -c 0.92,0.85,0.69,0.3 -o"; /* do NOT define -f (format) here */
|
||||||
@ -532,7 +584,7 @@ index 5dc3f22..664a1ad 100644
|
|||||||
static const char *fonts[] = { "monospace:size=10" };
|
static const char *fonts[] = { "monospace:size=10" };
|
||||||
static const char dmenufont[] = "monospace:size=10";
|
static const char dmenufont[] = "monospace:size=10";
|
||||||
static const char col_gray1[] = "#222222";
|
static const char col_gray1[] = "#222222";
|
||||||
@@ -67,6 +73,8 @@ static const Key keys[] = {
|
@@ -68,6 +74,8 @@ static const Key keys[] = {
|
||||||
/* modifier key function argument */
|
/* modifier key function argument */
|
||||||
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
{ MODKEY, XK_p, spawn, {.v = dmenucmd } },
|
||||||
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
{ MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
|
||||||
@ -542,7 +594,7 @@ index 5dc3f22..664a1ad 100644
|
|||||||
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
{ MODKEY, XK_j, focusstack, {.i = +1 } },
|
||||||
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
{ MODKEY, XK_k, focusstack, {.i = -1 } },
|
||||||
diff --git a/dwm.c b/dwm.c
|
diff --git a/dwm.c b/dwm.c
|
||||||
index 7aef964..5f2162e 100644
|
index afa3ca2..8818af7 100644
|
||||||
--- a/dwm.c
|
--- a/dwm.c
|
||||||
+++ b/dwm.c
|
+++ b/dwm.c
|
||||||
@@ -205,6 +205,10 @@ static void resize(Client *c, int x, int y, int w, int h, int interact);
|
@@ -205,6 +205,10 @@ static void resize(Client *c, int x, int y, int w, int h, int interact);
|
||||||
@ -592,7 +644,7 @@ index 7aef964..5f2162e 100644
|
|||||||
arrange(c->mon);
|
arrange(c->mon);
|
||||||
XMapWindow(dpy, c->win);
|
XMapWindow(dpy, c->win);
|
||||||
if (focusclient)
|
if (focusclient)
|
||||||
@@ -1471,6 +1490,105 @@ restack(Monitor *m)
|
@@ -1492,6 +1511,105 @@ restack(Monitor *m)
|
||||||
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
|
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,7 +750,7 @@ index 7aef964..5f2162e 100644
|
|||||||
void
|
void
|
||||||
run(void)
|
run(void)
|
||||||
{
|
{
|
||||||
@@ -1739,11 +1857,18 @@ showhide(Client *c)
|
@@ -1760,11 +1878,18 @@ showhide(Client *c)
|
||||||
void
|
void
|
||||||
spawn(const Arg *arg)
|
spawn(const Arg *arg)
|
||||||
{
|
{
|
||||||
@ -718,7 +770,7 @@ index 7aef964..5f2162e 100644
|
|||||||
if (dpy)
|
if (dpy)
|
||||||
close(ConnectionNumber(dpy));
|
close(ConnectionNumber(dpy));
|
||||||
setsid();
|
setsid();
|
||||||
@@ -1756,6 +1881,7 @@ spawn(const Arg *arg)
|
@@ -1777,6 +1902,7 @@ spawn(const Arg *arg)
|
||||||
execvp(((char **)arg->v)[0], (char **)arg->v);
|
execvp(((char **)arg->v)[0], (char **)arg->v);
|
||||||
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
|
die("dwm: execvp '%s' failed:", ((char **)arg->v)[0]);
|
||||||
}
|
}
|
||||||
@ -727,5 +779,5 @@ index 7aef964..5f2162e 100644
|
|||||||
|
|
||||||
int
|
int
|
||||||
--
|
--
|
||||||
2.45.2
|
2.46.0
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user