summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorKeith Packard <keithp@neko.keithp.com>2007-04-19 17:39:51 -0700
committerKeith Packard <keithp@neko.keithp.com>2007-04-19 17:49:55 -0700
commit96ef0f78438b60436c3940817980a3ab4070c7e8 (patch)
treeeeea850d44c5ef6af985db6b3bb0e16fd5582232 /hw
parent7ca4baffb5569ea12b578a4a3f69e93d272d6c6d (diff)
Disable SourceValidate in rotation to capture cursor.
SourceValidate is used exclusively by the software cursor code to pull the cursor off of the screen before using the screen as a source operand. This eliminates the software cursor from the frame buffer while painting the rotated image though. Disabling this function by temporarily setting the screen function pointer to NULL causes the cursor image to be captured. (cherry picked from commit 05e1c45ade9c558820685bfd2541617a2e8de816)
Diffstat (limited to 'hw')
-rw-r--r--hw/xfree86/modes/xf86Rotate.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/hw/xfree86/modes/xf86Rotate.c b/hw/xfree86/modes/xf86Rotate.c
index 94f95a0d7..359501e38 100644
--- a/hw/xfree86/modes/xf86Rotate.c
+++ b/hw/xfree86/modes/xf86Rotate.c
@@ -278,8 +278,18 @@ xf86RotateRedisplay(ScreenPtr pScreen)
region = DamageRegion(damage);
if (REGION_NOTEMPTY(pScreen, region))
{
- int c;
-
+ int c;
+ SourceValidateProcPtr SourceValidate;
+
+ /*
+ * SourceValidate is used by the software cursor code
+ * to pull the cursor off of the screen when reading
+ * bits from the frame buffer. Bypassing this function
+ * leaves the software cursor in place
+ */
+ SourceValidate = pScreen->SourceValidate;
+ pScreen->SourceValidate = NULL;
+
for (c = 0; c < xf86_config->num_crtc; c++)
{
xf86CrtcPtr crtc = xf86_config->crtc[c];
@@ -304,6 +314,7 @@ xf86RotateRedisplay(ScreenPtr pScreen)
REGION_UNINIT (pScreen, &crtc_damage);
}
}
+ pScreen->SourceValidate = SourceValidate;
DamageEmpty(damage);
}
}