From 719c50de65e883694e4c95f9610bc025c8213fa2 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Fri, 2 May 2025 22:09:07 +0800 Subject: [PATCH] feat: support fakefullscreen dispatch --- config.conf | 1 + src/config/parse_config.h | 2 ++ src/dispatch/dispatch.h | 1 + src/maomao.c | 22 +++++++++++++++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/config.conf b/config.conf index 4ea7604..67726c7 100644 --- a/config.conf +++ b/config.conf @@ -193,6 +193,7 @@ bind=ALT,Tab,toggleoverview, bind=ALT,backslash,togglefloating, bind=ALT,a,togglemaxmizescreen, bind=ALT,f,togglefullscreen, +bind=ALT+SHIFT,f,togglefakefullscreen, bind=SUPER,i,minized, bind=SUPER+SHIFT,I,restore_minized bind=ALT,z,toggle_scratchpad diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 3be8791..0e50151 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -456,6 +456,8 @@ FuncType parse_func_name(char *func_name, Arg *arg, char *arg_value) { func = togglefloating; } else if (strcmp(func_name, "togglefullscreen") == 0) { func = togglefullscreen; + } else if (strcmp(func_name, "togglefakefullscreen") == 0) { + func = togglefakefullscreen; } else if (strcmp(func_name, "minized") == 0) { func = minized; } else if (strcmp(func_name, "restore_minized") == 0) { diff --git a/src/dispatch/dispatch.h b/src/dispatch/dispatch.h index 7c5cee3..2f8e8a5 100644 --- a/src/dispatch/dispatch.h +++ b/src/dispatch/dispatch.h @@ -49,3 +49,4 @@ void incohgaps(const Arg *arg); void incovgaps(const Arg *arg); void incigaps(const Arg *arg); void defaultgaps(const Arg *arg); +void togglefakefullscreen(const Arg *arg); diff --git a/src/maomao.c b/src/maomao.c index 3b9ddc4..1462533 100644 --- a/src/maomao.c +++ b/src/maomao.c @@ -231,7 +231,7 @@ struct Client { bool dirty; uint32_t configure_serial; struct wlr_foreign_toplevel_handle_v1 *foreign_toplevel; - int isfloating, isurgent, isfullscreen, need_float_size_reduce, isminied; + int isfloating, isurgent, isfullscreen, isfakefullscreen, need_float_size_reduce, isminied; int ismaxmizescreen; int overview_backup_bw; int fullscreen_backup_x, fullscreen_backup_y, fullscreen_backup_w, @@ -539,6 +539,7 @@ static void resize(Client *c, struct wlr_box geo, int interact); static void run(char *startup_cmd); static void setcursor(struct wl_listener *listener, void *data); static void setfloating(Client *c, int floating); +static void setfakefullscreen(Client *c, int fakefullscreen); static void setfullscreen(Client *c, int fullscreen); static void setmaxmizescreen(Client *c, int maxmizescreen); static void reset_maxmizescreen_size(Client *c); @@ -5069,6 +5070,17 @@ void setmaxmizescreen(Client *c, int maxmizescreen) { } } +void +setfakefullscreen(Client *c, int fakefullscreen) +{ + c->isfakefullscreen = fakefullscreen; + if (!c->mon) + return; + if (c->isfullscreen) + setfullscreen(c, 0); + client_set_fullscreen(c, fakefullscreen); +} + void setfullscreen(Client *c, int fullscreen) // 用自定义全屏代理自带全屏 { c->isfullscreen = fullscreen; @@ -6336,6 +6348,14 @@ void togglefloating(const Arg *arg) { setborder_color(sel); } +void +togglefakefullscreen(const Arg *arg) +{ + Client *sel = focustop(selmon); + if (sel) + setfakefullscreen(sel, !sel->isfakefullscreen); +} + void togglefullscreen(const Arg *arg) { Client *sel = focustop(selmon); if (!sel)