fix: tagrule not apply correctly

This commit is contained in:
DreamMaoMao
2025-11-14 11:53:41 +08:00
parent 17f1ae2463
commit 16296898ce
2 changed files with 26 additions and 33 deletions

View File

@@ -3165,33 +3165,37 @@ void reapply_master(void) {
}
}
void parse_tagrule(Monitor *m) {
int i, jk;
for (i = 0; i < config.tag_rules_count; i++) {
if (config.tag_rules_count > 0 &&
(!config.tag_rules[i].monitor_name ||
regex_match(config.tag_rules[i].monitor_name,
m->wlr_output->name))) {
for (jk = 0; jk < LENGTH(layouts); jk++) {
if (config.tag_rules[i].layout_name &&
strcmp(layouts[jk].name, config.tag_rules[i].layout_name) ==
0) {
m->pertag->ltidxs[config.tag_rules[i].id] = &layouts[jk];
}
}
m->pertag->no_hide[config.tag_rules[i].id] =
config.tag_rules[i].no_hide;
}
}
}
void reapply_tagrule(void) {
Monitor *m = NULL;
int i, jk;
char *rule_monitor_name = NULL;
wl_list_for_each(m, &mons, link) {
if (!m->wlr_output->enabled) {
continue;
}
// apply tag rule
for (i = 1; i <= config.tag_rules_count; i++) {
rule_monitor_name = config.tag_rules[i - 1].monitor_name;
if (regex_match(rule_monitor_name, m->wlr_output->name) ||
!rule_monitor_name) {
for (jk = 0; jk < LENGTH(layouts); jk++) {
if (config.tag_rules_count > 0 &&
config.tag_rules[i - 1].layout_name &&
strcmp(layouts[jk].name,
config.tag_rules[i - 1].layout_name) == 0) {
m->pertag->ltidxs[config.tag_rules[i - 1].id] =
&layouts[jk];
m->pertag->no_hide[config.tag_rules[i - 1].id] =
config.tag_rules[i - 1].no_hide;
}
}
}
}
parse_tagrule(m);
}
}

View File

@@ -2694,18 +2694,7 @@ void createmon(struct wl_listener *listener, void *data) {
}
// apply tag rule
for (i = 1; i <= config.tag_rules_count; i++) {
for (jk = 0; jk < LENGTH(layouts); jk++) {
if (config.tag_rules_count > 0 &&
config.tag_rules[i - 1].layout_name &&
strcmp(layouts[jk].name, config.tag_rules[i - 1].layout_name) ==
0) {
m->pertag->ltidxs[config.tag_rules[i - 1].id] = &layouts[jk];
m->pertag->no_hide[config.tag_rules[i - 1].id] =
config.tag_rules[i - 1].no_hide;
}
}
}
parse_tagrule(m);
/* The xdg-protocol specifies:
*