diff --git a/sway/desktop/output.c b/sway/desktop/output.c index dccb2432..bc0ca470 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -520,6 +520,30 @@ static void damage_handle_destroy(struct wl_listener *listener, void *data) { transaction_commit_dirty(); } +static void update_output_manager_config(struct sway_server *server) { + struct wlr_output_configuration_v1 *config = + wlr_output_configuration_v1_create(); + + struct sway_output *output; + wl_list_for_each(output, &root->all_outputs, link) { + if (output == root->noop_output) { + continue; + } + struct wlr_output_configuration_head_v1 *config_head = + wlr_output_configuration_head_v1_create(config, output->wlr_output); + struct wlr_box *output_box = wlr_output_layout_get_box( + root->output_layout, output->wlr_output); + // We mark the output enabled even if it is switched off by DPMS + config_head->state.enabled = output->enabled; + if (output_box) { + config_head->state.x = output_box->x; + config_head->state.y = output_box->y; + } + } + + wlr_output_manager_v1_set_configuration(server->output_manager_v1, config); +} + static void handle_destroy(struct wl_listener *listener, void *data) { struct sway_output *output = wl_container_of(listener, output, destroy); wl_signal_emit(&output->events.destroy, output); @@ -538,6 +562,8 @@ static void handle_destroy(struct wl_listener *listener, void *data) { wl_list_remove(&output->damage_frame.link); transaction_commit_dirty(); + + update_output_manager_config(output->server); } static void handle_mode(struct wl_listener *listener, void *data) { @@ -561,6 +587,8 @@ static void handle_mode(struct wl_listener *listener, void *data) { arrange_layers(output); arrange_output(output); transaction_commit_dirty(); + + update_output_manager_config(output->server); } static void handle_transform(struct wl_listener *listener, void *data) { @@ -571,6 +599,8 @@ static void handle_transform(struct wl_listener *listener, void *data) { arrange_layers(output); arrange_output(output); transaction_commit_dirty(); + + update_output_manager_config(output->server); } static void update_textures(struct sway_container *con, void *data) { @@ -578,30 +608,6 @@ static void update_textures(struct sway_container *con, void *data) { container_update_marks_textures(con); } -static void update_output_manager_config(struct sway_server *server) { - struct wlr_output_configuration_v1 *config = - wlr_output_configuration_v1_create(); - - struct sway_output *output; - wl_list_for_each(output, &root->all_outputs, link) { - if (output == root->noop_output) { - continue; - } - struct wlr_output_configuration_head_v1 *config_head = - wlr_output_configuration_head_v1_create(config, output->wlr_output); - struct wlr_box *output_box = wlr_output_layout_get_box( - root->output_layout, output->wlr_output); - // We mark the output enabled even if it is switched off by DPMS - config_head->state.enabled = output->enabled; - if (output_box) { - config_head->state.x = output_box->x; - config_head->state.y = output_box->y; - } - } - - wlr_output_manager_v1_set_configuration(server->output_manager_v1, config); -} - static void handle_scale(struct wl_listener *listener, void *data) { struct sway_output *output = wl_container_of(listener, output, scale); if (!output->enabled || !output->configured) { @@ -611,6 +617,8 @@ static void handle_scale(struct wl_listener *listener, void *data) { output_for_each_container(output, update_textures, NULL); arrange_output(output); transaction_commit_dirty(); + + update_output_manager_config(output->server); } static void send_presented_iterator(struct sway_output *output,