From 3661e1838ba97f12a10f7cdda9853ee69693d5d1 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Sun, 12 Oct 2025 19:20:12 +0800 Subject: [PATCH] feat: add windowrule option force_tile_state --- src/config/parse_config.h | 4 ++++ src/mango.c | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/config/parse_config.h b/src/config/parse_config.h index d6a8c37..4145fb9 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -72,6 +72,7 @@ typedef struct { int no_force_center; int isterm; int allow_csd; + int force_tile_state; int noswallow; int noblur; float focused_opacity; @@ -1546,6 +1547,7 @@ void parse_option(Config *config, char *key, char *value) { rule->isnosizehint = -1; rule->isterm = -1; rule->allow_csd = -1; + rule->force_tile_state = -1; rule->noswallow = -1; rule->noblur = -1; rule->nofadein = -1; @@ -1640,6 +1642,8 @@ void parse_option(Config *config, char *key, char *value) { rule->isterm = atoi(val); } else if (strcmp(key, "allow_csd") == 0) { rule->allow_csd = atoi(val); + } else if (strcmp(key, "force_tile_state") == 0) { + rule->force_tile_state = atoi(val); } else if (strcmp(key, "noswallow") == 0) { rule->noswallow = atoi(val); } else if (strcmp(key, "noblur") == 0) { diff --git a/src/mango.c b/src/mango.c index c298f19..80a22a8 100644 --- a/src/mango.c +++ b/src/mango.c @@ -325,6 +325,7 @@ struct Client { struct dwl_animation animation; int isterm, noswallow; int allow_csd; + int force_tile_state; pid_t pid; Client *swallowing, *swallowedby; bool is_clip_to_hide; @@ -1129,6 +1130,7 @@ void toggle_hotarea(int x_root, int y_root) { static void apply_rule_properties(Client *c, const ConfigWinRule *r) { APPLY_INT_PROP(c, r, isterm); APPLY_INT_PROP(c, r, allow_csd); + APPLY_INT_PROP(c, r, force_tile_state); APPLY_INT_PROP(c, r, noswallow); APPLY_INT_PROP(c, r, nofadein); APPLY_INT_PROP(c, r, nofadeout); @@ -3511,6 +3513,7 @@ void init_client_properties(Client *c) { c->stack_innder_per = 0.0f; c->isterm = 0; c->allow_csd = 0; + c->force_tile_state = 1; } void // old fix to 0.5 @@ -4407,6 +4410,15 @@ setfloating(Client *c, int floating) { set_size_per(c->mon, c); } + if (!c->force_tile_state) { + if (c->isfloating) { + client_set_tiled(c, WLR_EDGE_NONE); + } else { + client_set_tiled(c, WLR_EDGE_TOP | WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | + WLR_EDGE_RIGHT); + } + } + arrange(c->mon, false); setborder_color(c); printstatus();