diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-02-16 16:14:27 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-02-18 15:11:48 -0500 |
commit | 19586ab768ad2a79cb8342d34e16b25105bc36bd (patch) | |
tree | d3e04758fdae3d5a9c452d5326afcbdc26af8fb1 /sway/config | |
parent | tray: fix memory leaks (diff) | |
download | sway-19586ab768ad2a79cb8342d34e16b25105bc36bd.tar.gz sway-19586ab768ad2a79cb8342d34e16b25105bc36bd.tar.zst sway-19586ab768ad2a79cb8342d34e16b25105bc36bd.zip |
Fix reload freeze when not modsetting current mode
This fixes the issue of the display freezing on reload with
wlroots#1545.
On master, all output configs are applied on reload. This may cause an
output to have its config applied up to three times, instead of just
once. The three cases are: output name, output identifier, and wildcard.
Not only is this inefficient, but it can cause swaybg to be spawned and
immediately killed.
However, swaybg requires two roundtrips of wl_display (to obtain needed
globals) before it enters its normal event loop. Modesetting will
roundtrip the wl_display. Without modesetting, waitpid for killing
swaybg could block infinitely due to swaybg being blocked by
wl_display_roundtrip.
This only configured an output once. It either uses the wildcard config
or creates an empty wildcard config and applies that. This also fixes a
bug where an output would not be reset when there is no output config to
apply to it.
Diffstat (limited to 'sway/config')
-rw-r--r-- | sway/config/output.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sway/config/output.c b/sway/config/output.c index f1a06379..0f238715 100644 --- a/sway/config/output.c +++ b/sway/config/output.c | |||
@@ -391,6 +391,17 @@ void apply_output_config_to_outputs(struct output_config *oc) { | |||
391 | } | 391 | } |
392 | } | 392 | } |
393 | 393 | ||
394 | void reset_outputs(void) { | ||
395 | struct output_config *oc = NULL; | ||
396 | int i = list_seq_find(config->output_configs, output_name_cmp, "*"); | ||
397 | if (i >= 0) { | ||
398 | oc = config->output_configs->items[i]; | ||
399 | } else { | ||
400 | oc = store_output_config(new_output_config("*")); | ||
401 | } | ||
402 | apply_output_config_to_outputs(oc); | ||
403 | } | ||
404 | |||
394 | void free_output_config(struct output_config *oc) { | 405 | void free_output_config(struct output_config *oc) { |
395 | if (!oc) { | 406 | if (!oc) { |
396 | return; | 407 | return; |