Move `output->enabled` guard into output functions

This simplifies the API for output disabling and enabling. We do not need to
check beforehand if the invariants hold but can bail out if we happen to find
out during enable/disable of a monitor (e.g. double disable/enable).
This commit is contained in:
raichoo 2020-08-29 07:50:20 +00:00
parent 7da20bc57e
commit dfd72dea7d
2 changed files with 13 additions and 18 deletions

View File

@ -142,9 +142,7 @@ disable_outputs(void)
struct hikari_output *output;
wl_list_for_each (output, &hikari_server.outputs, server_outputs) {
if (output->enabled) {
hikari_output_disable(output);
}
hikari_output_disable(output);
hikari_output_damage_whole(output);
}
@ -167,9 +165,7 @@ enable_outputs(void)
struct hikari_output *output;
wl_list_for_each (output, &hikari_server.outputs, server_outputs) {
if (!output->enabled) {
hikari_output_enable(output);
}
hikari_output_enable(output);
}
mode->outputs_disabled = false;
@ -278,10 +274,7 @@ cancel(void)
struct hikari_output *output;
wl_list_for_each (output, &hikari_server.outputs, server_outputs) {
if (!output->enabled) {
hikari_output_enable(output);
}
hikari_output_enable(output);
hikari_output_damage_whole(output);
}

View File

@ -113,7 +113,10 @@ void
hikari_output_disable(struct hikari_output *output)
{
assert(output != NULL);
assert(output->enabled);
if (!output->enabled) {
return;
}
struct wlr_output *wlr_output = output->wlr_output;
@ -131,7 +134,10 @@ void
hikari_output_enable(struct hikari_output *output)
{
assert(output != NULL);
assert(!output->enabled);
if (output->enabled) {
return;
}
struct wlr_output *wlr_output = output->wlr_output;
@ -183,9 +189,7 @@ damage_destroy_handler(struct wl_listener *listener, void *data)
struct hikari_output *output =
wl_container_of(listener, output, damage_destroy);
if (output->enabled) {
hikari_output_disable(output);
}
hikari_output_disable(output);
}
#ifdef HAVE_LAYERSHELL
@ -303,9 +307,7 @@ hikari_output_fini(struct hikari_output *output)
close_layers(&output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND]);
#endif
if (output->enabled) {
hikari_output_disable(output);
}
hikari_output_disable(output);
wl_list_remove(&output->destroy.link);