aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2019-05-24 21:23:36 +0200
committerFurkan Sahin <furkan-dev@proton.me>2019-05-24 21:23:36 +0200
commit52854535637161bca382323026b85f28b610558c (patch)
tree2e24beb72890bfc68eaeb87e54c779c07b245345
parent81f1439aa20b35ae1016282bb994490cec6a1f0e (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,