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 /sway/desktop | |
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 'sway/desktop')
-rw-r--r-- | sway/desktop/output.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 4a51b5cc..5fdaba68 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -844,7 +844,7 @@ static void handle_destroy(struct wl_listener *listener, void *data) { | |||
844 | 844 | ||
845 | static void handle_mode(struct wl_listener *listener, void *data) { | 845 | static void handle_mode(struct wl_listener *listener, void *data) { |
846 | struct sway_output *output = wl_container_of(listener, output, mode); | 846 | struct sway_output *output = wl_container_of(listener, output, mode); |
847 | if (!output->configured && !output->enabled) { | 847 | if (!output->enabled && !output->enabling) { |
848 | struct output_config *oc = find_output_config(output); | 848 | struct output_config *oc = find_output_config(output); |
849 | if (output->wlr_output->current_mode != NULL && | 849 | if (output->wlr_output->current_mode != NULL && |
850 | (!oc || oc->enabled)) { | 850 | (!oc || oc->enabled)) { |
@@ -857,7 +857,7 @@ static void handle_mode(struct wl_listener *listener, void *data) { | |||
857 | } | 857 | } |
858 | return; | 858 | return; |
859 | } | 859 | } |
860 | if (!output->enabled || !output->configured) { | 860 | if (!output->enabled) { |
861 | return; | 861 | return; |
862 | } | 862 | } |
863 | arrange_layers(output); | 863 | arrange_layers(output); |
@@ -869,7 +869,7 @@ static void handle_mode(struct wl_listener *listener, void *data) { | |||
869 | 869 | ||
870 | static void handle_transform(struct wl_listener *listener, void *data) { | 870 | static void handle_transform(struct wl_listener *listener, void *data) { |
871 | struct sway_output *output = wl_container_of(listener, output, transform); | 871 | struct sway_output *output = wl_container_of(listener, output, transform); |
872 | if (!output->enabled || !output->configured) { | 872 | if (!output->enabled) { |
873 | return; | 873 | return; |
874 | } | 874 | } |
875 | arrange_layers(output); | 875 | arrange_layers(output); |
@@ -886,7 +886,7 @@ static void update_textures(struct sway_container *con, void *data) { | |||
886 | 886 | ||
887 | static void handle_scale(struct wl_listener *listener, void *data) { | 887 | static void handle_scale(struct wl_listener *listener, void *data) { |
888 | struct sway_output *output = wl_container_of(listener, output, scale); | 888 | struct sway_output *output = wl_container_of(listener, output, scale); |
889 | if (!output->enabled || !output->configured) { | 889 | if (!output->enabled) { |
890 | return; | 890 | return; |
891 | } | 891 | } |
892 | arrange_layers(output); | 892 | arrange_layers(output); |