diff options
| author | Simon Ser <contact@emersion.fr> | 2023-07-24 11:01:39 +0200 | 
|---|---|---|
| committer | Simon Ser <contact@emersion.fr> | 2023-07-26 17:08:47 +0000 | 
| commit | 307720d5019c62bb8dfeea9e2cb5638cec526553 (patch) | |
| tree | 92294caaafc68942aed77f741ffcc1d09ffa0d21 /backend/drm | |
| parent | 2f859f5becfc8853842eb975b54c19936a704105 (diff) | |
| download | wlroots-307720d5019c62bb8dfeea9e2cb5638cec526553.tar.xz | |
backend/drm: restore custom modes
We were only restoring fixed modes here. The DRM backend no longer
creates fixed modes when the compositor sets a custom mode, so we
need to handle this situation when restoring.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3698
Diffstat (limited to 'backend/drm')
| -rw-r--r-- | backend/drm/backend.c | 17 | 
1 files changed, 9 insertions, 8 deletions
diff --git a/backend/drm/backend.c b/backend/drm/backend.c index 54852185..244a2df1 100644 --- a/backend/drm/backend.c +++ b/backend/drm/backend.c @@ -121,17 +121,18 @@ static void handle_session_active(struct wl_listener *listener, void *data) {  		struct wlr_drm_connector *conn;  		wl_list_for_each(conn, &drm->connectors, link) { -			struct wlr_output_mode *mode = NULL; -			if (conn->status != DRM_MODE_DISCONNECTED && conn->output.enabled -					&& conn->output.current_mode != NULL) { -				mode = conn->output.current_mode; -			} +			bool enabled = conn->status != DRM_MODE_DISCONNECTED && conn->output.enabled;  			struct wlr_output_state state;  			wlr_output_state_init(&state); -			wlr_output_state_set_enabled(&state, mode != NULL); -			if (mode != NULL) { -				wlr_output_state_set_mode(&state, mode); +			wlr_output_state_set_enabled(&state, enabled); +			if (enabled) { +				if (conn->output.current_mode != NULL) { +					wlr_output_state_set_mode(&state, conn->output.current_mode); +				} else { +					wlr_output_state_set_custom_mode(&state, +						conn->output.width, conn->output.height, conn->output.refresh); +				}  			}  			if (!drm_connector_commit_state(conn, &state)) {  				wlr_drm_conn_log(conn, WLR_ERROR, "Failed to restore state after VT switch");  | 
