feat(window_rule): support width/height as fractions in window rules.

This commit is contained in:
Alessio Molinari 2026-01-21 22:09:14 +01:00
parent 49921eadfa
commit 1d616d54ff
No known key found for this signature in database
2 changed files with 10 additions and 6 deletions

View file

@ -80,8 +80,8 @@ typedef struct {
const char *monitor; const char *monitor;
int32_t offsetx; int32_t offsetx;
int32_t offsety; int32_t offsety;
int32_t width; float width;
int32_t height; float height;
int32_t nofocus; int32_t nofocus;
int32_t nofadein; int32_t nofadein;
int32_t nofadeout; int32_t nofadeout;
@ -1805,9 +1805,9 @@ void parse_option(Config *config, char *key, char *value) {
} else if (strcmp(key, "no_force_center") == 0) { } else if (strcmp(key, "no_force_center") == 0) {
rule->no_force_center = atoi(val); rule->no_force_center = atoi(val);
} else if (strcmp(key, "width") == 0) { } else if (strcmp(key, "width") == 0) {
rule->width = atoi(val); rule->width = atof(val);
} else if (strcmp(key, "height") == 0) { } else if (strcmp(key, "height") == 0) {
rule->height = atoi(val); rule->height = atof(val);
} else if (strcmp(key, "isnoborder") == 0) { } else if (strcmp(key, "isnoborder") == 0) {
rule->isnoborder = atoi(val); rule->isnoborder = atoi(val);
} else if (strcmp(key, "isnoshadow") == 0) { } else if (strcmp(key, "isnoshadow") == 0) {

View file

@ -1360,10 +1360,14 @@ void applyrules(Client *c) {
// set geometry of floating client // set geometry of floating client
if (r->width > 0) if (r->width > 1)
c->float_geom.width = r->width; c->float_geom.width = r->width;
if (r->height > 0) else
c->float_geom.width = round(mon->m.width * r->width);
if (r->height > 1)
c->float_geom.height = r->height; c->float_geom.height = r->height;
else
c->float_geom.height = round(mon->m.height * r->height);
if (r->width > 0 || r->height > 0) { if (r->width > 0 || r->height > 0) {
c->iscustomsize = 1; c->iscustomsize = 1;