diff options
author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-08-11 15:25:13 -0500 |
---|---|---|
committer | Leonardo Hernández <leohdz172@protonmail.com> | 2022-08-12 23:21:25 -0500 |
commit | 48396a1bf8ce4282c4fc76d853195e1026caf7d7 (patch) | |
tree | 58543e178a1e9a9868d81829a22e075e2e1b36a4 | |
parent | b6e3fc1645c5ac53277ab0dc20d7c266e1581b86 (diff) |
fix crash when setting a custom mode
-rw-r--r-- | dwl.c | 18 |
1 files changed, 17 insertions, 1 deletions
@@ -1621,7 +1621,23 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test) ok &= wlr_output_test(wlr_output); wlr_output_rollback(wlr_output); } else { - ok &= wlr_output_commit(wlr_output); + int output_ok = 1; + /* If it's a custom mode to avoid an assertion failed in wlr_output_commit() + * we test if that mode does not fail rather than just call wlr_output_commit(). + * We do not test normal modes because (at least in my hardware (@sevz17)) + * wlr_output_test() fails even if that mode can actually be set */ + if (!config_head->state.mode) + ok &= (output_ok = wlr_output_test(wlr_output) + && wlr_output_commit(wlr_output)); + else + ok &= wlr_output_commit(wlr_output); + + /* In custom modes we call wlr_output_test(), it it fails + * we need to rollback, and normal modes seems to does not cause + * assertions failed in wlr_output_commit() which rollback + * the output on failure */ + if (!output_ok) + wlr_output_rollback(wlr_output); } } |