mirror of
https://github.com/swaywm/sway.git
synced 2025-11-25 06:59:48 -05:00
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.
This commit is contained in:
parent
0bafc55176
commit
272ca06171
3 changed files with 15 additions and 3 deletions
|
|
@ -391,6 +391,17 @@ void apply_output_config_to_outputs(struct output_config *oc) {
|
|||
}
|
||||
}
|
||||
|
||||
void reset_outputs(void) {
|
||||
struct output_config *oc = NULL;
|
||||
int i = list_seq_find(config->output_configs, output_name_cmp, "*");
|
||||
if (i >= 0) {
|
||||
oc = config->output_configs->items[i];
|
||||
} else {
|
||||
oc = store_output_config(new_output_config("*"));
|
||||
}
|
||||
apply_output_config_to_outputs(oc);
|
||||
}
|
||||
|
||||
void free_output_config(struct output_config *oc) {
|
||||
if (!oc) {
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue