diff --git a/src/config/parse_config.h b/src/config/parse_config.h index 2079309..7c96b6b 100644 --- a/src/config/parse_config.h +++ b/src/config/parse_config.h @@ -2566,6 +2566,53 @@ void reset_blur_params(void) { } } +void reapply_monitor_rules(void) { + ConfigMonitorRule *mr; + Monitor *m; + int ji, jk; + struct wlr_output_state state; + wlr_output_state_init(&state); + + wl_list_for_each(m, &mons, link) { + if (!m->wlr_output->enabled) { + continue; + } + + for (ji = 0; ji < config.monitor_rules_count; ji++) { + if (config.monitor_rules_count < 1) + break; + + mr = &config.monitor_rules[ji]; + if (!mr->name || regex_match(mr->name, m->wlr_output->name)) { + m->mfact = mr->mfact; + m->nmaster = mr->nmaster; + m->m.x = mr->x; + m->m.y = mr->y; + if (mr->layout) { + for (jk = 0; jk < LENGTH(layouts); jk++) { + if (strcmp(layouts[jk].name, mr->layout) == 0) { + m->lt = &layouts[jk]; + } + } + } + + if (mr->width > 0 && mr->height > 0 && mr->refresh > 0) { + wlr_output_state_set_custom_mode( + &state, mr->width, mr->height, mr->refresh * 1000); + } + + wlr_output_state_set_scale(&state, mr->scale); + wlr_output_state_set_transform(&state, mr->rr); + wlr_output_layout_add(output_layout, m->wlr_output, mr->x, + mr->y); + } + } + + wlr_output_commit_state(m->wlr_output, &state); + wlr_output_state_finish(&state); + } +} + void reload_config(const Arg *arg) { Client *c; Monitor *m; @@ -2634,5 +2681,7 @@ void reload_config(const Arg *arg) { } } + reapply_monitor_rules(); + arrange(selmon, false); } diff --git a/src/maomao.c b/src/maomao.c index d764dad..b4f1e34 100644 --- a/src/maomao.c +++ b/src/maomao.c @@ -423,16 +423,6 @@ struct Monitor { char last_surface_ws_name[256]; }; -typedef struct { - const char *name; - float mfact; - int nmaster; - float scale; - const Layout *lt; - enum wl_output_transform rr; - int x, y; -} MonitorRule; - typedef struct { struct wlr_pointer_constraint_v1 *constraint; struct wl_listener destroy;