From ed31d50b5f7f25e4db986711699704e615b8afcb Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Fri, 19 Mar 2010 17:24:27 -0700 Subject: [PATCH] XQuartz: Constrain the pointer to the updated display bounds on display reconfigure. http://xquartz.macosforge.org/trac/ticket/346 --- hw/xquartz/quartz.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c index 3c0420580..59107be84 100644 --- a/hw/xquartz/quartz.c +++ b/hw/xquartz/quartz.c @@ -241,6 +241,7 @@ void QuartzUpdateScreens(void) { WindowPtr pRoot; int x, y, width, height, sx, sy; xEvent e; + BoxRec bounds; if (noPseudoramiXExtension || screenInfo.numScreens != 1) { @@ -277,8 +278,16 @@ void QuartzUpdateScreens(void) { //pScreen->PaintWindowBackground (pRoot, &pRoot->borderClip, PW_BACKGROUND); miPaintWindow(pRoot, &pRoot->borderClip, PW_BACKGROUND); -// TODO: This is a noop in 1.6 and nuked in master... we may need to do something else now to handle it -// DefineInitialRootWindow(pRoot); + /* pointer events are clipped to old display region after display reconfiguration + * http://xquartz.macosforge.org/trac/ticket/346 + */ + bounds.x1 = 0; + bounds.x2 = width; + bounds.y1 = 0; + bounds.y2 = height; + pScreen->ConstrainCursor(inputInfo.pointer, pScreen, &bounds); + inputInfo.pointer->spriteInfo->sprite->physLimits = bounds; + inputInfo.pointer->spriteInfo->sprite->hotLimits = bounds; DEBUG_LOG("Root Window: %dx%d @ (%d, %d) darwinMainScreen (%d, %d) xy (%d, %d) dixScreenOrigins (%d, %d)\n", width, height, x - sx, y - sy, darwinMainScreenX, darwinMainScreenY, x, y, dixScreenOrigins[pScreen->myNum].x, dixScreenOrigins[pScreen->myNum].y);