summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2006-11-22 17:06:47 +1030
committerPeter Hutterer <whot@hyena.localdomain>2006-11-22 17:06:47 +1030
commit8c16f21d5df08b028e93440d632939a5fdbf5876 (patch)
treef40a1a71c46ed7c17ba5bc78a1b2da166d93b403
parent70383105de279df553874efa56b37a7b3e426ea1 (diff)
dix GetSpriteWindow() adjusted for MPX
added device dependency for MPX to DoEnterLeaveEvents, EnterLeaveEvents, EnterNotifies, LeaveNotifies and FixUpEventFromWindow.
-rw-r--r--Changelog13
-rw-r--r--Xext/security.c4
-rw-r--r--Xi/exevents.c6
-rw-r--r--dix/events.c99
-rw-r--r--include/dix.h2
-rw-r--r--xkb/ddxFakeMtn.c2
6 files changed, 86 insertions, 40 deletions
diff --git a/Changelog b/Changelog
index 93f1455d4..458060ccf 100644
--- a/Changelog
+++ b/Changelog
@@ -17,6 +17,19 @@ Files:
Xi/exevents.c
+dix GetSpriteWindow() adjusted for MPX
+ added device dependency for MPX to DoEnterLeaveEvents,
+ EnterLeaveEvents, EnterNotifies, LeaveNotifies and
+ FixUpEventFromWindow.
+
+Files:
+ Xext/security.c
+ Xi/exevents.c
+ ddx/ddxFakeMtn.c
+ dix/events.c
+ include/dix.h
+
+
== 21.11.06 ==
mi: added MPX to miSpriteReportDamage
added id field to miCursorInfoPtr, required to pass through to miDC
diff --git a/Xext/security.c b/Xext/security.c
index ac762794a..c1c8f1f8f 100644
--- a/Xext/security.c
+++ b/Xext/security.c
@@ -745,12 +745,12 @@ SecurityDetermineEventPropogationLimits(
if (pFocusWin == PointerRootWin)
{ /* focus follows the pointer */
- *ppWin = GetSpriteWindow();
+ *ppWin = GetSpriteWindow(dev);
*ppStopWin = NULL; /* propogate all the way to the root */
}
else
{ /* a real window is set for the focus */
- WindowPtr pSpriteWin = GetSpriteWindow();
+ WindowPtr pSpriteWin = GetSpriteWindow(dev);
*ppStopWin = pFocusWin->parent; /* don't go past the focus window */
/* if the pointer is in a subwindow of the focus window, start
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 13687e3a5..d89c379e9 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -276,9 +276,9 @@ ProcessOtherEvent(xEventPtr xE, register DeviceIntPtr other, int count)
if (grab)
DeliverGrabbedEvent(xE, other, deactivateDeviceGrab, count);
else if (other->focus)
- DeliverFocusedEvent(other, xE, GetSpriteWindow(), count);
+ DeliverFocusedEvent(other, xE, GetSpriteWindow(other), count);
else
- DeliverDeviceEvents(GetSpriteWindow(), xE, NullGrab, NullWindow,
+ DeliverDeviceEvents(GetSpriteWindow(other), xE, NullGrab, NullWindow,
other, count);
if (deactivateDeviceGrab == TRUE)
@@ -781,7 +781,7 @@ SendEvent(ClientPtr client, DeviceIntPtr d, Window dest, Bool propagate,
{
WindowPtr pWin;
WindowPtr effectiveFocus = NullWindow; /* only set if dest==InputFocus */
- WindowPtr spriteWin = GetSpriteWindow();
+ WindowPtr spriteWin = GetSpriteWindow(d);
if (dest == PointerWindow)
pWin = spriteWin;
diff --git a/dix/events.c b/dix/events.c
index bb6bcfc41..492e4a415 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -270,6 +270,7 @@ _X_EXPORT HotSpot xeviehot;
#endif
static void DoEnterLeaveEvents(
+ DeviceIntPtr pDev,
WindowPtr fromWin,
WindowPtr toWin,
int mode
@@ -614,8 +615,9 @@ XineramaCheckMotion(xEvent *xE, DeviceIntPtr pDev)
if (prevSpriteWin != NullWindow) {
if (!xE)
UpdateCurrentTimeIf();
- DoEnterLeaveEvents(prevSpriteWin, pSprite->win, NotifyNormal);
- }
+ DoEnterLeaveEvents(pDev, prevSpriteWin, pSprite->win,
+ NotifyNormal);
+ }
PostNewCursor(pDev);
return FALSE;
}
@@ -991,8 +993,13 @@ GetCurrentRootWindow()
}
_X_EXPORT WindowPtr
-GetSpriteWindow()
+GetSpriteWindow(DeviceIntPtr pDev)
{
+#ifdef MPX
+ if(IsMPDev(pDev))
+ return mpsprites[pDev->id].win;
+#endif
+
return sprite->win;
}
@@ -1321,7 +1328,7 @@ ActivatePointerGrab(register DeviceIntPtr mouse, register GrabPtr grab,
sprite->hotPhys.x = sprite->hotPhys.y = 0;
ConfineCursorToWindow(grab->confineTo, FALSE, TRUE);
}
- DoEnterLeaveEvents(oldWin, grab->window, NotifyGrab);
+ DoEnterLeaveEvents(mouse, oldWin, grab->window, NotifyGrab);
mouse->valuator->motionHintWindow = NullWindow;
if (syncEvents.playingEvents)
mouse->grabTime = syncEvents.time;
@@ -1351,7 +1358,7 @@ DeactivatePointerGrab(register DeviceIntPtr mouse)
if (dev->sync.other == grab)
dev->sync.other = NullGrab;
}
- DoEnterLeaveEvents(grab->window, sprite->win, NotifyUngrab);
+ DoEnterLeaveEvents(mouse, grab->window, sprite->win, NotifyUngrab);
if (grab->confineTo)
ConfineCursorToWindow(ROOT, FALSE, FALSE);
PostNewCursor(inputInfo.pointer);
@@ -1823,11 +1830,18 @@ MaybeDeliverEventsToClient(register WindowPtr pWin, xEvent *pEvents,
static void
FixUpEventFromWindow(
+ DeviceIntPtr pDev,
xEvent *xE,
WindowPtr pWin,
Window child,
Bool calcChild)
{
+ SpritePtr pSprite = sprite;
+#ifdef MPX
+ if (IsMPDev(pDev))
+ pSprite = &mpsprites[pDev->id];
+#endif
+
if (calcChild)
{
WindowPtr w=spriteTrace[spriteTraceGood-1];
@@ -1857,7 +1871,7 @@ FixUpEventFromWindow(
}
XE_KBPTR.root = ROOT->drawable.id;
XE_KBPTR.event = pWin->drawable.id;
- if (sprite->hot.pScreen == pWin->drawable.pScreen)
+ if (pSprite->hot.pScreen == pWin->drawable.pScreen)
{
XE_KBPTR.sameScreen = xTrue;
XE_KBPTR.child = child;
@@ -1896,7 +1910,7 @@ DeliverDeviceEvents(register WindowPtr pWin, register xEvent *xE, GrabPtr grab,
{
if (inputMasks && (inputMasks->inputEvents[mskidx] & filter))
{
- FixUpEventFromWindow(xE, pWin, child, FALSE);
+ FixUpEventFromWindow(dev, xE, pWin, child, FALSE);
deliveries = DeliverEventsToWindow(pWin, xE, count, filter,
grab, mskidx);
if (deliveries > 0)
@@ -1921,7 +1935,7 @@ DeliverDeviceEvents(register WindowPtr pWin, register xEvent *xE, GrabPtr grab,
{
if ((wOtherEventMasks(pWin)|pWin->eventMask) & filter)
{
- FixUpEventFromWindow(xE, pWin, child, FALSE);
+ FixUpEventFromWindow(dev, xE, pWin, child, FALSE);
deliveries = DeliverEventsToWindow(pWin, xE, count, filter,
grab, 0);
if (deliveries > 0)
@@ -2125,8 +2139,9 @@ CheckMotion(xEvent *xE, DeviceIntPtr pDev)
if (prevSpriteWin != NullWindow) {
if (!xE)
UpdateCurrentTimeIf();
- DoEnterLeaveEvents(prevSpriteWin, pSprite->win, NotifyNormal);
- }
+ DoEnterLeaveEvents(pDev, prevSpriteWin, pSprite->win,
+ NotifyNormal);
+ }
PostNewCursor(pDev);
return FALSE;
}
@@ -2600,7 +2615,7 @@ CheckPassiveGrabsOnWindow(
#endif
(*device->ActivateGrab)(device, grab, currentTime, TRUE);
- FixUpEventFromWindow(xE, grab->window, None, TRUE);
+ FixUpEventFromWindow(device, xE, grab->window, None, TRUE);
(void) TryClientEvents(rClient(grab), xE, count,
filters[xE->u.u.type],
@@ -2705,7 +2720,7 @@ DeliverFocusedEvent(DeviceIntPtr keybd, xEvent *xE, WindowPtr window, int count)
return;
}
/* just deliver it to the focus window */
- FixUpEventFromWindow(xE, focus, None, FALSE);
+ FixUpEventFromWindow(inputInfo.pointer, xE, focus, None, FALSE);
if (xE->u.u.type & EXTENSION_EVENT_BASE)
mskidx = keybd->id;
(void)DeliverEventsToWindow(focus, xE, count, filters[xE->u.u.type],
@@ -2745,7 +2760,7 @@ DeliverGrabbedEvent(register xEvent *xE, register DeviceIntPtr thisDev,
}
if (!deliveries)
{
- FixUpEventFromWindow(xE, grab->window, None, TRUE);
+ FixUpEventFromWindow(thisDev, xE, grab->window, None, TRUE);
deliveries = TryClientEvents(rClient(grab), xE, count,
(Mask)grab->eventMask,
filters[xE->u.u.type], grab);
@@ -3321,6 +3336,7 @@ CommonAncestor(
static void
EnterLeaveEvent(
+ DeviceIntPtr pDev,
int type,
int mode,
int detail,
@@ -3330,7 +3346,7 @@ EnterLeaveEvent(
xEvent event;
register DeviceIntPtr keybd = inputInfo.keyboard;
WindowPtr focus;
- register DeviceIntPtr mouse = inputInfo.pointer;
+ register DeviceIntPtr mouse = pDev;
register GrabPtr grab = mouse->grab;
Mask mask;
@@ -3355,7 +3371,7 @@ EnterLeaveEvent(
event.u.enterLeave.rootX = sprite->hot.x;
event.u.enterLeave.rootY = sprite->hot.y;
/* Counts on the same initial structure of crossing & button events! */
- FixUpEventFromWindow(&event, pWin, None, FALSE);
+ FixUpEventFromWindow(mouse, &event, pWin, None, FALSE);
/* Enter/Leave events always set child */
event.u.enterLeave.child = child;
event.u.enterLeave.flags = event.u.keyButtonPointer.sameScreen ?
@@ -3406,18 +3422,26 @@ EnterLeaveEvent(
}
static void
-EnterNotifies(WindowPtr ancestor, WindowPtr child, int mode, int detail)
+EnterNotifies(DeviceIntPtr pDev,
+ WindowPtr ancestor,
+ WindowPtr child,
+ int mode,
+ int detail)
{
WindowPtr parent = child->parent;
if (ancestor == parent)
return;
- EnterNotifies(ancestor, parent, mode, detail);
- EnterLeaveEvent(EnterNotify, mode, detail, parent, child->drawable.id);
-}
+ EnterNotifies(pDev, ancestor, parent, mode, detail);
+ EnterLeaveEvent(pDev, EnterNotify, mode, detail, parent,
+ child->drawable.id); }
static void
-LeaveNotifies(WindowPtr child, WindowPtr ancestor, int mode, int detail)
+LeaveNotifies(DeviceIntPtr pDev,
+ WindowPtr child,
+ WindowPtr ancestor,
+ int mode,
+ int detail)
{
register WindowPtr pWin;
@@ -3425,36 +3449,45 @@ LeaveNotifies(WindowPtr child, WindowPtr ancestor, int mode, int detail)
return;
for (pWin = child->parent; pWin != ancestor; pWin = pWin->parent)
{
- EnterLeaveEvent(LeaveNotify, mode, detail, pWin, child->drawable.id);
- child = pWin;
+ EnterLeaveEvent(pDev, LeaveNotify, mode, detail, pWin,
+ child->drawable.id);
+ child = pWin;
}
}
static void
-DoEnterLeaveEvents(WindowPtr fromWin, WindowPtr toWin, int mode)
+DoEnterLeaveEvents(DeviceIntPtr pDev,
+ WindowPtr fromWin,
+ WindowPtr toWin,
+ int mode)
{
if (fromWin == toWin)
return;
if (IsParent(fromWin, toWin))
{
- EnterLeaveEvent(LeaveNotify, mode, NotifyInferior, fromWin, None);
- EnterNotifies(fromWin, toWin, mode, NotifyVirtual);
- EnterLeaveEvent(EnterNotify, mode, NotifyAncestor, toWin, None);
+ EnterLeaveEvent(pDev, LeaveNotify, mode, NotifyInferior, fromWin,
+ None);
+ EnterNotifies(pDev, fromWin, toWin, mode,
+ NotifyVirtual);
+ EnterLeaveEvent(pDev, EnterNotify, mode, NotifyAncestor, toWin, None);
}
else if (IsParent(toWin, fromWin))
{
- EnterLeaveEvent(LeaveNotify, mode, NotifyAncestor, fromWin, None);
- LeaveNotifies(fromWin, toWin, mode, NotifyVirtual);
- EnterLeaveEvent(EnterNotify, mode, NotifyInferior, toWin, None);
+ EnterLeaveEvent(pDev, LeaveNotify, mode, NotifyAncestor, fromWin,
+ None);
+ LeaveNotifies(pDev, fromWin, toWin, mode, NotifyVirtual);
+ EnterLeaveEvent(pDev, EnterNotify, mode, NotifyInferior, toWin, None);
}
else
{ /* neither fromWin nor toWin is descendent of the other */
WindowPtr common = CommonAncestor(toWin, fromWin);
/* common == NullWindow ==> different screens */
- EnterLeaveEvent(LeaveNotify, mode, NotifyNonlinear, fromWin, None);
- LeaveNotifies(fromWin, common, mode, NotifyNonlinearVirtual);
- EnterNotifies(common, toWin, mode, NotifyNonlinearVirtual);
- EnterLeaveEvent(EnterNotify, mode, NotifyNonlinear, toWin, None);
+ EnterLeaveEvent(pDev, LeaveNotify, mode, NotifyNonlinear, fromWin,
+ None);
+ LeaveNotifies(pDev, fromWin, common, mode, NotifyNonlinearVirtual);
+ EnterNotifies(pDev, common, toWin, mode, NotifyNonlinearVirtual);
+ EnterLeaveEvent(pDev, EnterNotify, mode, NotifyNonlinear, toWin,
+ None);
}
}
diff --git a/include/dix.h b/include/dix.h
index a5a570a51..0c66d8d57 100644
--- a/include/dix.h
+++ b/include/dix.h
@@ -525,7 +525,7 @@ extern Bool IsParent(
extern WindowPtr GetCurrentRootWindow(void);
-extern WindowPtr GetSpriteWindow(void);
+extern WindowPtr GetSpriteWindow(DeviceIntPtr pDev);
extern void NoticeEventTime(xEventPtr /* xE */);
diff --git a/xkb/ddxFakeMtn.c b/xkb/ddxFakeMtn.c
index 3dd733b32..7e75c1586 100644
--- a/xkb/ddxFakeMtn.c
+++ b/xkb/ddxFakeMtn.c
@@ -54,7 +54,7 @@ int oldX,oldY;
ScreenPtr pScreen, oldScreen;
GetSpritePosition(inputInfo.pointer, &oldX, &oldY);
- pScreen = oldScreen = GetSpriteWindow()->drawable.pScreen;
+ pScreen = oldScreen = GetSpriteWindow(inputInfo.pointer)->drawable.pScreen;
#ifdef PANORAMIX
if (!noPanoramiXExtension) {