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);  		}  	} | 
