commit ab032822958dd3041f478c48498f17e5d259dd6f
parent 3747b3162ea062fb4630e63cee1a8ad57de87a81
Author: Devin J. Pohly <djpohly@gmail.com>
Date: Mon, 18 Jan 2021 15:02:15 -0600
commit entire output config, or fail and rollback
The wlr-output-management protocol requires that either all of the
changes from an apply request be applied successfully, in which case a
"succeeded" event is sent, or all of the changes are reverted and a
"failed" event is sent. As written, this could partially commit
changes, then fail.
Test the changes first (even for an "apply" event), then commit or
rollback as appropriate.
Diffstat:
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/dwl.c b/dwl.c
@@ -1545,11 +1545,14 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test)
}
}
- if (test) {
- ok &= wlr_output_test(wlr_output);
- wlr_output_rollback(wlr_output);
- } else
- ok &= wlr_output_commit(wlr_output);
+ if (!(ok = wlr_output_test(wlr_output)))
+ break;
+ }
+ wl_list_for_each(config_head, &config->heads, link) {
+ if (ok && !test)
+ wlr_output_commit(config_head->state.output);
+ else
+ wlr_output_rollback(config_head->state.output);
}
if (ok)
wlr_output_configuration_v1_send_succeeded(config);