summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Gajdusek <[email protected]>2019-05-24 21:23:36 +0200
committerSimon Ser <[email protected]>2019-05-24 22:52:07 +0300
commit0e582f1a51fde4fc31455f57fe3b9e354d2a5109 (patch)
tree2e24beb72890bfc68eaeb87e54c779c07b245345
parentb3a5effef2be30c21d5a5cd7e60c9134af4948eb (diff)
Update output manager config on all output events
The output manager config was not properly updated when output configuration was changed through some other means (such as a command).
-rw-r--r--sway/desktop/output.c56
1 files changed, 32 insertions, 24 deletions
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,