diff --git a/README.org b/README.org index c7aafca..a1c507d 100644 --- a/README.org +++ b/README.org @@ -10,6 +10,7 @@ - [[#always-center][Always Center]] - [[#attach-top][Attach Top]] - [[#auto-start][Auto Start]] + - [[#fake-fullscreen-client][Fake Fullscreen Client]] - [[#float-unfocused-border-color][Float Unfocused Border Color]] - [[#foreign-toplevel-management][Foreign Toplevel Management]] - [[#gapless-grid][Gapless Grid]] @@ -113,6 +114,14 @@ Note: Commands from array are executed using execvp(). So if you need to execute #define AUTOSTART_PATCH 0 #+END_SRC +*** [[https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/fakefullscreenclient][Fake Fullscreen Client]] + +Allow setting fake fullscreen per client + +#+BEGIN_SRC c :tangle patches.def.h +#define FAKE_FULLSCREEN_CLIENT_PATCH 1 +#+END_SRC + *** [[https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/float-unfocused-border-color][Float Unfocused Border Color]] A revive of the floatBorderColor patch. @@ -486,6 +495,9 @@ static const Key keys[] = { { MODKEY, XKB_KEY_space, setlayout, {0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, +#if FAKE_FULLSCREEN_CLIENT_PATCH + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_E, togglefakefullscreen, {0} }, +#endif // FAKE_FULLSCREEN_CLIENT_PATCH { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, diff --git a/config.def.h b/config.def.h index f5ae313..364489a 100644 --- a/config.def.h +++ b/config.def.h @@ -210,6 +210,9 @@ static const Key keys[] = { { MODKEY, XKB_KEY_space, setlayout, {0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, +#if FAKE_FULLSCREEN_CLIENT_PATCH + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_E, togglefakefullscreen, {0} }, +#endif // FAKE_FULLSCREEN_CLIENT_PATCH { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, diff --git a/config.h b/config.h index 4ce628f..964eb65 100644 --- a/config.h +++ b/config.h @@ -203,6 +203,9 @@ static const Key keys[] = { { MODKEY, XKB_KEY_space, setlayout, {0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, +#if FAKE_FULLSCREEN_CLIENT_PATCH + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_E, togglefakefullscreen, {0} }, +#endif // FAKE_FULLSCREEN_CLIENT_PATCH { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, diff --git a/dwl.c b/dwl.c index a38944b..ddcd94c 100644 --- a/dwl.c +++ b/dwl.c @@ -162,7 +162,11 @@ typedef struct { #endif // XWAYLAND unsigned int bw; uint32_t tags; +#if !FAKE_FULLSCREEN_CLIENT_PATCH int isfloating, isurgent, isfullscreen; +#else // FAKE_FULLSCREEN_CLIENT_PATCH + int isfloating, isurgent, isfullscreen, isfakefullscreen; +#endif // FAKE_FULLSCREEN_CLIENT_PATCH uint32_t resize; /* configure serial of a pending resize */ } Client; @@ -414,6 +418,9 @@ static void setcursor(struct wl_listener *listener, void *data); static void setcursorshape(struct wl_listener *listener, void *data); static void setfloating(Client *c, int floating); static void setfullscreen(Client *c, int fullscreen); +#if FAKE_FULLSCREEN_CLIENT_PATCH +static void setfakefullscreen(Client *c, int fullscreen); +#endif // FAKE_FULLSCREEN_CLIENT_PATCH static void setgamma(struct wl_listener *listener, void *data); #if VANITYGAPS_PATCH static void setgaps(int oh, int ov, int ih, int iv); @@ -434,6 +441,9 @@ static void togglebar(const Arg *arg); #endif // IPC_PATCH static void togglefloating(const Arg *arg); static void togglefullscreen(const Arg *arg); +#if FAKE_FULLSCREEN_CLIENT_PATCH +static void togglefakefullscreen(const Arg *arg); +#endif // FAKE_FULLSCREEN_CLIENT_PATCH #if VANITYGAPS_PATCH static void togglegaps(const Arg *arg); #endif // VANITYGAPS_PATCH @@ -3221,6 +3231,19 @@ setfullscreen(Client *c, int fullscreen) printstatus(); } +#if FAKE_FULLSCREEN_CLIENT_PATCH +void +setfakefullscreen(Client *c, int fullscreen) +{ + c->isfakefullscreen = fullscreen; + if (!c->mon) + return; + if (c->isfullscreen) + setfullscreen(c, 0); + client_set_fullscreen(c, fullscreen); +} +#endif // FAKE_FULLSCREEN_CLIENT_PATCH + void setgamma(struct wl_listener *listener, void *data) { @@ -3725,6 +3748,16 @@ togglefullscreen(const Arg *arg) setfullscreen(sel, !sel->isfullscreen); } +#if FAKE_FULLSCREEN_CLIENT_PATCH +void +togglefakefullscreen(const Arg *arg) +{ + Client *sel = focustop(selmon); + if (sel) + setfakefullscreen(sel, !sel->isfakefullscreen); +} +#endif // FAKE_FULLSCREEN_CLIENT_PATCH + #if VANITYGAPS_PATCH void togglegaps(const Arg *arg) diff --git a/patches.def.h b/patches.def.h index d1c29c8..245be78 100644 --- a/patches.def.h +++ b/patches.def.h @@ -4,6 +4,8 @@ #define AUTOSTART_PATCH 0 +#define FAKE_FULLSCREEN_CLIENT_PATCH 1 + #define FLOAT_UNFOCUSED_BORDER_COLOR_PATCH 1 #define FOREIGN_TOPLEVEL_MANAGEMENT_PATCH 1 diff --git a/patches/fakefullscreenclient-20240329.patch b/patches/fakefullscreenclient-20240329.patch new file mode 100644 index 0000000..848f350 --- /dev/null +++ b/patches/fakefullscreenclient-20240329.patch @@ -0,0 +1,87 @@ +From 2ec6d0c668b4daee601337f8da45ccfa3a7d5fc6 Mon Sep 17 00:00:00 2001 +From: choc +Date: Fri, 29 Mar 2024 22:50:00 +0800 +Subject: [PATCH] implement fakefullscreenclient + +--- + config.def.h | 1 + + dwl.c | 23 ++++++++++++++++++++++- + 2 files changed, 23 insertions(+), 1 deletion(-) + +diff --git a/config.def.h b/config.def.h +index 9009517..8c220eb 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -137,6 +137,7 @@ static const Key keys[] = { + { MODKEY, XKB_KEY_space, setlayout, {0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, + { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, ++ { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_E, togglefakefullscreen, {0} }, + { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, + { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, +diff --git a/dwl.c b/dwl.c +index 5867b0c..1e78491 100644 +--- a/dwl.c ++++ b/dwl.c +@@ -137,7 +137,7 @@ typedef struct { + #endif + unsigned int bw; + uint32_t tags; +- int isfloating, isurgent, isfullscreen; ++ int isfloating, isurgent, isfullscreen, isfakefullscreen; + uint32_t resize; /* configure serial of a pending resize */ + } Client; + +@@ -318,6 +318,7 @@ static void setcursor(struct wl_listener *listener, void *data); + static void setcursorshape(struct wl_listener *listener, void *data); + static void setfloating(Client *c, int floating); + static void setfullscreen(Client *c, int fullscreen); ++static void setfakefullscreen(Client *c, int fullscreen); + static void setgamma(struct wl_listener *listener, void *data); + static void setlayout(const Arg *arg); + static void setmfact(const Arg *arg); +@@ -332,6 +333,7 @@ static void tagmon(const Arg *arg); + static void tile(Monitor *m); + static void togglefloating(const Arg *arg); + static void togglefullscreen(const Arg *arg); ++static void togglefakefullscreen(const Arg *arg); + static void toggletag(const Arg *arg); + static void toggleview(const Arg *arg); + static void unlocksession(struct wl_listener *listener, void *data); +@@ -2181,6 +2183,17 @@ setfullscreen(Client *c, int fullscreen) + printstatus(); + } + ++void ++setfakefullscreen(Client *c, int fullscreen) ++{ ++ c->isfakefullscreen = fullscreen; ++ if (!c->mon) ++ return; ++ if (c->isfullscreen) ++ setfullscreen(c, 0); ++ client_set_fullscreen(c, fullscreen); ++} ++ + void + setgamma(struct wl_listener *listener, void *data) + { +@@ -2620,6 +2633,14 @@ togglefullscreen(const Arg *arg) + setfullscreen(sel, !sel->isfullscreen); + } + ++void ++togglefakefullscreen(const Arg *arg) ++{ ++ Client *sel = focustop(selmon); ++ if (sel) ++ setfakefullscreen(sel, !sel->isfakefullscreen); ++} ++ + void + toggletag(const Arg *arg) + { +-- +2.44.0 +