xf86-video-intel: src/sna/sna_display.c src/sna/sna.h

Chris Wilson ickle at kemper.freedesktop.org
Mon Nov 10 05:37:38 PST 2014


 src/sna/sna.h         |    1 +
 src/sna/sna_display.c |   14 +++++++++++---
 2 files changed, 12 insertions(+), 3 deletions(-)

New commits:
commit b2492fa45beaf3c676eea2d5d75e35d60b91d769
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Mon Nov 10 13:30:15 2014 +0000

    sna: Only reshow unhidden cursors after modesetting
    
    Reported-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index 9d139ed..8129eae 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -326,6 +326,7 @@ struct sna {
 		uint32_t fg, bg;
 		int size;
 
+		int active;
 		int last_x;
 		int last_y;
 
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index f16a46c..d098642 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -4728,6 +4728,7 @@ sna_show_cursors(ScrnInfoPtr scrn)
 		}
 	}
 	sigio_unblock(sigio);
+	sna->cursor.active = true;
 }
 
 static void
@@ -4792,6 +4793,7 @@ sna_hide_cursors(ScrnInfoPtr scrn)
 	int sigio, c;
 
 	DBG(("%s\n", __FUNCTION__));
+	sna->cursor.active = false;
 
 	sigio = sigio_block();
 	for (c = 0; c < sna->mode.num_real_crtc; c++) {
@@ -5136,9 +5138,11 @@ sna_cursors_init(ScreenPtr screen, struct sna *sna)
 static void
 sna_cursors_reload(struct sna *sna)
 {
-	sna_set_cursor_position(sna->scrn,
-				sna->cursor.last_x,
-				sna->cursor.last_y);
+	DBG(("%s: active?=%d\n", __FUNCTION__, sna->cursor.active));
+	if (sna->cursor.active)
+		sna_set_cursor_position(sna->scrn,
+					sna->cursor.last_x,
+					sna->cursor.last_y);
 }
 
 static void
@@ -5933,6 +5937,9 @@ sna_mode_disable(struct sna *sna)
 	if (!sna->scrn->vtSema)
 		return false;
 
+	/* XXX we will cause previously hidden cursors to be reshown, but
+	 * this should be a rare fixup case for severe fragmentation.
+	 */
 	sna_hide_cursors(sna->scrn);
 	for (i = 0; i < sna->mode.num_real_crtc; i++)
 		sna_crtc_disable(config->crtc[i]);
@@ -5967,6 +5974,7 @@ sna_mode_enable(struct sna *sna)
 	}
 
 	update_flush_interval(sna);
+	sna_show_cursors(sna->scrn);
 }
 
 void


More information about the xorg-commit mailing list