diff --git a/ipc_server.c b/ipc_server.c index ced183a..05614b3 100644 --- a/ipc_server.c +++ b/ipc_server.c @@ -127,10 +127,6 @@ ipc_client_handle_writable(int client_fd, uint32_t mask, void *data) { return 0; } - if(client->write_buffer_len <= 0) { - return 0; - } - if(fcntl(client->fd, F_GETFD) == -1) { return 0; } diff --git a/output.c b/output.c index 506f5bd..fc04cf7 100644 --- a/output.c +++ b/output.c @@ -258,6 +258,12 @@ output_apply_config(struct cg_server *server, struct cg_output *output, struct cg_output_config *config) { struct wlr_output *wlr_output = output->wlr_output; + if(config->status == OUTPUT_OFF) { + wlr_output_enable(wlr_output, false); + wlr_output_commit(wlr_output); + return; + } + if(output->wlr_output->enabled) { wlr_output_layout_remove(server->output_layout, wlr_output); } diff --git a/output.h b/output.h index 90cd615..7ee5b31 100644 --- a/output.h +++ b/output.h @@ -36,7 +36,12 @@ struct cg_output_priorities { struct wl_list link; }; -enum output_status { OUTPUT_ENABLE, OUTPUT_DISABLE, OUTPUT_DEFAULT }; +enum output_status { + OUTPUT_ENABLE, + OUTPUT_DISABLE, + OUTPUT_DEFAULT, + OUTPUT_OFF +}; struct cg_output_config { enum output_status status; diff --git a/parse.c b/parse.c index 68767c6..ef3637c 100644 --- a/parse.c +++ b/parse.c @@ -545,6 +545,10 @@ parse_output_config_keyword(char *key_str, enum output_status *status) { *status = OUTPUT_ENABLE; } else if(strcmp(key_str, "disable") == 0) { *status = OUTPUT_DISABLE; + } else if(strcmp(key_str, "off") == 0) { + *status = OUTPUT_OFF; + } else if(strcmp(key_str, "on") == 0) { + *status = OUTPUT_ENABLE; } else { return -1; } @@ -579,7 +583,8 @@ parse_output_config(char **saveptr, char **errstr) { name); goto error; } - if(cfg->status == OUTPUT_ENABLE || cfg->status == OUTPUT_DISABLE) { + if(cfg->status == OUTPUT_ENABLE || cfg->status == OUTPUT_DISABLE || + cfg->status == OUTPUT_OFF) { cfg->output_name = strdup(name); return cfg; }