From 5432f00adfdd8375fb422ad9033253d17f04efc7 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 10 Jul 2020 18:04:45 +0200 Subject: config/output: don't change output state before commit Previously, we called output_disable prior to wlr_output_commit. This mutates Sway's output state before the output commit actually succeeds. This results in Sway's state getting out-of-sync with wlroots'. An alternative fix [1] was to revert the changes made by output_disable in case of failure. This is a little complicated. Instead, this patch makes it so Sway's internal state is never changed before a successful wlr_output commit. We had two output flags: enabled and configured. However enabled was set prior to the output becoming enabled, and was used to prevent the output event handlers (specifically, the mode handler) from calling apply_output_config again (infinite loop). Rename enabled to enabling and use it exclusively for this purpose. Rename configure to enabled, because that's what it really means. [1]: https://github.com/swaywm/sway/pull/5521 Closes: https://github.com/swaywm/sway/issues/5483 --- sway/tree/output.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'sway/tree') diff --git a/sway/tree/output.c b/sway/tree/output.c index 9a10c6a8..ae3c3abf 100644 --- a/sway/tree/output.c +++ b/sway/tree/output.c @@ -110,12 +110,12 @@ struct sway_output *output_create(struct wlr_output *wlr_output) { return output; } -void output_configure(struct sway_output *output) { - if (!sway_assert(!output->configured, "output is already configured")) { +void output_enable(struct sway_output *output) { + if (!sway_assert(!output->enabled, "output is already enabled")) { return; } struct wlr_output *wlr_output = output->wlr_output; - output->configured = true; + output->enabled = true; list_add(root->outputs, output); restore_workspaces(output); @@ -262,7 +262,6 @@ void output_disable(struct sway_output *output) { list_del(root->outputs, index); output->enabled = false; - output->configured = false; output->current_mode = NULL; arrange_root(); -- cgit v1.2.3