[RFC XI 2.1 - xserver 5/9] Input: Pass sprite instead of device to XYToWindow

Chase Douglas chase.douglas at canonical.com
Fri Nov 12 14:35:06 PST 2010


From: Daniel Stone <daniel at fooishbar.org>

XYToWindow calculates the position of the cursor and updates the sprite
trace, but does nothing else with the device.  Pass a SpritePtr instead
so we can update an alternate focus instead of hardcoding the device's
sprite.

Signed-off-by: Daniel Stone <daniel at fooishbar.org>
---
 dix/events.c |   13 ++++++-------
 1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/dix/events.c b/dix/events.c
index f7781ce..0f98914 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -335,7 +335,7 @@ IsMaster(DeviceIntPtr dev)
 }
 
 static WindowPtr XYToWindow(
-    DeviceIntPtr pDev,
+    SpritePtr pSprite,
     int x,
     int y
 );
@@ -1277,6 +1277,7 @@ ComputeFreezes(void)
 {
     DeviceIntPtr replayDev = syncEvents.replayDev;
     int i;
+    SpritePtr pSprite = replayDev->spriteInfo->sprite;
     WindowPtr w;
     GrabPtr grab;
     DeviceIntPtr dev;
@@ -1293,7 +1294,7 @@ ComputeFreezes(void)
 
 	syncEvents.replayDev = (DeviceIntPtr)NULL;
 
-        w = XYToWindow(replayDev, event->root_x, event->root_y);
+        w = XYToWindow(pSprite, event->root_x, event->root_y);
 	for (i = 0; i < replayDev->spriteInfo->sprite->spriteTraceGood; i++)
 	{
 	    if (syncEvents.replayWin ==
@@ -2582,15 +2583,13 @@ PointInBorderSize(WindowPtr pWin, int x, int y)
  * @returns the window at the given coordinates.
  */
 static WindowPtr
-XYToWindow(DeviceIntPtr pDev, int x, int y)
+XYToWindow(SpritePtr pSprite, int x, int y)
 {
     WindowPtr  pWin;
     BoxRec		box;
-    SpritePtr pSprite;
 
-    pSprite = pDev->spriteInfo->sprite;
     pSprite->spriteTraceGood = 1;	/* root window still there */
-    pWin = RootWindow(pDev)->firstChild;
+    pWin = pSprite->spriteTrace[0]->firstChild;
     while (pWin)
     {
 	if ((pWin->mapped) &&
@@ -2802,7 +2801,7 @@ CheckMotion(DeviceEvent *ev, DeviceIntPtr pDev)
 	ev->root_y = pSprite->hot.y;
     }
 
-    newSpriteWin = XYToWindow(pDev, pSprite->hot.x, pSprite->hot.y);
+    newSpriteWin = XYToWindow(pSprite, pSprite->hot.x, pSprite->hot.y);
 
     if (newSpriteWin != prevSpriteWin)
     {
-- 
1.7.1



More information about the xorg-devel mailing list