mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-06-27 13:14:03 -04:00
feat: add disable option to monitor rule
This commit is contained in:
parent
2f77be7e69
commit
171d859cb5
3 changed files with 19 additions and 2 deletions
|
|
@ -33,6 +33,7 @@ monitorrule=name:Values,Parameter:Values,Parameter:Values
|
|||
| `hdr` | integer | 0, 1 | Enable hdr support |
|
||||
| `rr` | integer | 0-7 | Monitor transform |
|
||||
| `custom` | integer | 0, 1 | Enable custom mode (not supported on all displays — may cause black screen) |
|
||||
| `disable` | integer | 0, 1 | Disable the monitor |
|
||||
|
||||
### Transform Values
|
||||
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ typedef struct {
|
|||
int32_t vrr; // variable refresh rate
|
||||
int32_t custom; // enable custom mode
|
||||
int32_t hdr; // enable hdr mode
|
||||
int32_t disable; // prefer disable
|
||||
} ConfigMonitorRule;
|
||||
|
||||
// 修改后的宏定义
|
||||
|
|
@ -2128,6 +2129,7 @@ bool parse_option(Config *config, char *key, char *value) {
|
|||
rule->vrr = 0;
|
||||
rule->hdr = 0;
|
||||
rule->custom = 0;
|
||||
rule->disable = 0;
|
||||
|
||||
bool parse_error = false;
|
||||
char *token = strtok(value, ",");
|
||||
|
|
@ -2167,6 +2169,8 @@ bool parse_option(Config *config, char *key, char *value) {
|
|||
rule->vrr = CLAMP_INT(atoi(val), 0, 1);
|
||||
} else if (strcmp(key, "hdr") == 0) {
|
||||
rule->hdr = CLAMP_INT(atoi(val), 0, 1);
|
||||
} else if (strcmp(key, "disable") == 0) {
|
||||
rule->disable = CLAMP_INT(atoi(val), 0, 1);
|
||||
} else if (strcmp(key, "custom") == 0) {
|
||||
rule->custom = CLAMP_INT(atoi(val), 0, 1);
|
||||
} else {
|
||||
|
|
@ -4068,6 +4072,7 @@ void reapply_monitor_rules(void) {
|
|||
vrr = mr->vrr >= 0 ? mr->vrr : 0;
|
||||
custom = mr->custom >= 0 ? mr->custom : 0;
|
||||
m->hdr_enable = mr->hdr >= 0 ? mr->hdr : 0;
|
||||
m->prefer_disable = mr->disable >= 0 ? mr->disable : 0;
|
||||
|
||||
(void)apply_rule_to_state(m, mr, &m->pending, vrr, custom);
|
||||
wlr_output_layout_add(output_layout, m->wlr_output, mx, my);
|
||||
|
|
@ -4075,7 +4080,11 @@ void reapply_monitor_rules(void) {
|
|||
}
|
||||
}
|
||||
|
||||
wlr_output_state_set_enabled(&m->pending, true);
|
||||
if (m->prefer_disable) {
|
||||
wlr_output_state_set_enabled(&m->pending, false);
|
||||
} else {
|
||||
wlr_output_state_set_enabled(&m->pending, true);
|
||||
}
|
||||
|
||||
if (m->hdr_enable) {
|
||||
output_state_setup_hdr(m, false, &m->pending);
|
||||
|
|
|
|||
|
|
@ -601,6 +601,7 @@ struct Monitor {
|
|||
bool vrr_global_enable;
|
||||
bool is_vrr_opening;
|
||||
bool hdr_enable;
|
||||
bool prefer_disable;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
|
@ -3469,6 +3470,7 @@ void createmon(struct wl_listener *listener, void *data) {
|
|||
m->is_vrr_opening = false;
|
||||
|
||||
m->hdr_enable = false;
|
||||
m->prefer_disable = false;
|
||||
|
||||
m->wlr_output = wlr_output;
|
||||
m->wlr_output->data = m;
|
||||
|
|
@ -3508,6 +3510,7 @@ void createmon(struct wl_listener *listener, void *data) {
|
|||
scale = r->scale;
|
||||
rr = r->rr;
|
||||
m->hdr_enable = r->hdr;
|
||||
m->prefer_disable = r->disable >= 0 ? r->disable : 0;
|
||||
|
||||
if (apply_rule_to_state(m, r, &m->pending, vrr, custom)) {
|
||||
custom_monitor_mode = true;
|
||||
|
|
@ -3526,7 +3529,11 @@ void createmon(struct wl_listener *listener, void *data) {
|
|||
LISTEN(&wlr_output->events.request_state, &m->request_state,
|
||||
requestmonstate);
|
||||
|
||||
wlr_output_state_set_enabled(&m->pending, 1);
|
||||
if (m->prefer_disable) {
|
||||
wlr_output_state_set_enabled(&m->pending, false);
|
||||
} else {
|
||||
wlr_output_state_set_enabled(&m->pending, true);
|
||||
}
|
||||
|
||||
if (m->hdr_enable) {
|
||||
output_state_setup_hdr(m, false, &m->pending);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue