diff options
author | Simon Ser <contact@emersion.fr> | 2020-07-10 18:04:45 +0200 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-07-15 19:27:12 +0200 |
commit | d5f5885c941d9f74f131734b253133108c759e20 (patch) | |
tree | 59b5e3e01b63e7a8a8d5c794f776dc24913565b5 /include | |
parent | Reload command now matches i3's implementation (diff) | |
download | sway-d5f5885c941d9f74f131734b253133108c759e20.tar.gz sway-d5f5885c941d9f74f131734b253133108c759e20.tar.zst sway-d5f5885c941d9f74f131734b253133108c759e20.zip |
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
(cherry picked from commit 5432f00adfdd8375fb422ad9033253d17f04efc7)
Diffstat (limited to 'include')
-rw-r--r-- | include/sway/output.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/include/sway/output.h b/include/sway/output.h index cabb4b55..f27f6344 100644 --- a/include/sway/output.h +++ b/include/sway/output.h | |||
@@ -36,7 +36,7 @@ struct sway_output { | |||
36 | // last applied mode when the output is DPMS'ed | 36 | // last applied mode when the output is DPMS'ed |
37 | struct wlr_output_mode *current_mode; | 37 | struct wlr_output_mode *current_mode; |
38 | 38 | ||
39 | bool enabled, configured; | 39 | bool enabling, enabled; |
40 | list_t *workspaces; | 40 | list_t *workspaces; |
41 | 41 | ||
42 | struct sway_output_state current; | 42 | struct sway_output_state current; |
@@ -98,7 +98,7 @@ struct sway_output *all_output_by_name_or_id(const char *name_or_id); | |||
98 | 98 | ||
99 | void output_sort_workspaces(struct sway_output *output); | 99 | void output_sort_workspaces(struct sway_output *output); |
100 | 100 | ||
101 | void output_configure(struct sway_output *output); | 101 | void output_enable(struct sway_output *output); |
102 | 102 | ||
103 | void output_disable(struct sway_output *output); | 103 | void output_disable(struct sway_output *output); |
104 | 104 | ||