From 94fa6c88f4eb956c75fce6c65acb335f4f9a4a07 Mon Sep 17 00:00:00 2001
From: emersion <contact@emersion.fr>
Date: Wed, 18 Apr 2018 00:15:25 +0100
Subject: output: don't emit the mode event if it hasn't changed

This also fixes #535.
---
 backend/drm/drm.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

(limited to 'backend')

diff --git a/backend/drm/drm.c b/backend/drm/drm.c
index 187db368..fcc435e6 100644
--- a/backend/drm/drm.c
+++ b/backend/drm/drm.c
@@ -496,11 +496,15 @@ static bool wlr_drm_connector_set_mode(struct wlr_output *output,
 	conn->state = WLR_DRM_CONN_CONNECTED;
 	wlr_output_update_mode(&conn->output, mode);
 
+	// When switching VTs, the mode is not updated but the buffers become
+	// invalid, so we need to manually damage the output here
+	wlr_output_damage_whole(&conn->output);
+
 	// Since realloc_crtcs can deallocate planes on OTHER outputs,
-	// we actually need to reinitialize any than has changed
+	// we actually need to reinitialize any that has changed
 	ssize_t output_index = -1;
 	wl_list_for_each(conn, &drm->outputs, link) {
-		output_index += 1;
+		output_index++;
 		struct wlr_output_mode *mode = conn->output.current_mode;
 		struct wlr_drm_crtc *crtc = conn->crtc;
 
-- 
cgit v1.2.3