From 902221022e8cd281dca321caa9d8eb0ed28c550b Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Sun, 3 Aug 2025 07:43:00 +0800 Subject: [PATCH] opt: optimize fullscreen fakefullscreen and maximizescreen state convert --- src/dispatch/bind_define.h | 4 ++-- src/mango.c | 25 +++++++++++++++---------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/dispatch/bind_define.h b/src/dispatch/bind_define.h index bac2149..bdcd921 100644 --- a/src/dispatch/bind_define.h +++ b/src/dispatch/bind_define.h @@ -976,7 +976,7 @@ void togglefullscreen(const Arg *arg) { sel->is_in_scratchpad = 0; sel->isnamedscratchpad = 0; - if (sel->isfullscreen || sel->ismaxmizescreen) + if (sel->isfullscreen) setfullscreen(sel, 0); else setfullscreen(sel, 1); @@ -1011,7 +1011,7 @@ void togglemaxmizescreen(const Arg *arg) { sel->is_in_scratchpad = 0; sel->isnamedscratchpad = 0; - if (sel->isfullscreen || sel->ismaxmizescreen) + if (sel->ismaxmizescreen) setmaxmizescreen(sel, 0); else setmaxmizescreen(sel, 1); diff --git a/src/mango.c b/src/mango.c index 23cd19c..bb782bd 100644 --- a/src/mango.c +++ b/src/mango.c @@ -842,13 +842,13 @@ void applybounds(Client *c, struct wlr_box *bbox) { /*清除全屏标志,还原全屏时清0的border*/ void clear_fullscreen_flag(Client *c) { - if (c->isfullscreen || c->ismaxmizescreen) { - c->isfullscreen = 0; - c->isfloating = 0; - c->ismaxmizescreen = 0; - c->bw = c->isnoborder ? 0 : borderpx; + if (c->isfullscreen) { setfullscreen(c, false); } + + if (c->ismaxmizescreen) { + setmaxmizescreen(c, 0); + } } void minized(const Arg *arg) { @@ -3939,6 +3939,10 @@ void setmaxmizescreen(Client *c, int maxmizescreen) { : LyrTile]); if (maxmizescreen) { + + if (c->isfullscreen) + setfullscreen(c, 0); + if (c->isfloating) c->oldgeom = c->geom; if (selmon->isoverview) { @@ -3956,8 +3960,6 @@ void setmaxmizescreen(Client *c, int maxmizescreen) { } else { c->bw = c->isnoborder ? 0 : borderpx; c->ismaxmizescreen = 0; - c->isfullscreen = 0; - setfullscreen(c, false); if (c->isfloating) setfloating(c, 1); arrange(c->mon, false); @@ -3970,7 +3972,8 @@ void setfakefullscreen(Client *c, int fakefullscreen) { return; if (c->isfullscreen) setfullscreen(c, 0); - client_set_fullscreen(c, fakefullscreen); + else + client_set_fullscreen(c, fakefullscreen); } void setfullscreen(Client *c, int fullscreen) // 用自定义全屏代理自带全屏 @@ -3994,6 +3997,9 @@ void setfullscreen(Client *c, int fullscreen) // 用自定义全屏代理自带 } if (fullscreen) { + if (c->ismaxmizescreen) + setmaxmizescreen(c, 0); + if (c->isfloating) c->oldgeom = c->geom; if (selmon->isoverview) { @@ -4009,8 +4015,7 @@ void setfullscreen(Client *c, int fullscreen) // 用自定义全屏代理自带 } else { c->bw = c->isnoborder ? 0 : borderpx; c->isfullscreen = 0; - c->isfullscreen = 0; - c->ismaxmizescreen = 0; + c->isfakefullscreen = 0; if (c->isfloating) setfloating(c, 1); arrange(c->mon, false);