dix: Implement gesture event fixups before delivery
This commit is contained in:
parent
227f601de3
commit
0bf4123fd3
50
dix/events.c
50
dix/events.c
|
@ -2545,6 +2545,44 @@ FixUpXI2DeviceEventFromWindow(SpritePtr pSprite, int evtype,
|
||||||
(pSprite->hot.pScreen == pWin->drawable.pScreen);
|
(pSprite->hot.pScreen == pWin->drawable.pScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
FixUpXI2PinchEventFromWindow(SpritePtr pSprite, xXIGesturePinchEvent *event,
|
||||||
|
WindowPtr pWin, Window child)
|
||||||
|
{
|
||||||
|
event->root = RootWindow(pSprite)->drawable.id;
|
||||||
|
event->event = pWin->drawable.id;
|
||||||
|
|
||||||
|
if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
|
||||||
|
event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x);
|
||||||
|
event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y);
|
||||||
|
event->child = child;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
event->event_x = 0;
|
||||||
|
event->event_y = 0;
|
||||||
|
event->child = None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
FixUpXI2SwipeEventFromWindow(SpritePtr pSprite, xXIGestureSwipeEvent *event,
|
||||||
|
WindowPtr pWin, Window child)
|
||||||
|
{
|
||||||
|
event->root = RootWindow(pSprite)->drawable.id;
|
||||||
|
event->event = pWin->drawable.id;
|
||||||
|
|
||||||
|
if (pSprite->hot.pScreen == pWin->drawable.pScreen) {
|
||||||
|
event->event_x = event->root_x - double_to_fp1616(pWin->drawable.x);
|
||||||
|
event->event_y = event->root_y - double_to_fp1616(pWin->drawable.y);
|
||||||
|
event->child = child;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
event->event_x = 0;
|
||||||
|
event->event_y = 0;
|
||||||
|
event->child = None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adjust event fields to comply with the window properties.
|
* Adjust event fields to comply with the window properties.
|
||||||
*
|
*
|
||||||
|
@ -2578,6 +2616,18 @@ FixUpEventFromWindow(SpritePtr pSprite,
|
||||||
case XI_BarrierHit:
|
case XI_BarrierHit:
|
||||||
case XI_BarrierLeave:
|
case XI_BarrierLeave:
|
||||||
return;
|
return;
|
||||||
|
case XI_GesturePinchBegin:
|
||||||
|
case XI_GesturePinchUpdate:
|
||||||
|
case XI_GesturePinchEnd:
|
||||||
|
FixUpXI2PinchEventFromWindow(pSprite,
|
||||||
|
(xXIGesturePinchEvent*) xE, pWin, child);
|
||||||
|
break;
|
||||||
|
case XI_GestureSwipeBegin:
|
||||||
|
case XI_GestureSwipeUpdate:
|
||||||
|
case XI_GestureSwipeEnd:
|
||||||
|
FixUpXI2SwipeEventFromWindow(pSprite,
|
||||||
|
(xXIGestureSwipeEvent*) xE, pWin, child);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
FixUpXI2DeviceEventFromWindow(pSprite, evtype,
|
FixUpXI2DeviceEventFromWindow(pSprite, evtype,
|
||||||
(xXIDeviceEvent*) xE, pWin, child);
|
(xXIDeviceEvent*) xE, pWin, child);
|
||||||
|
|
Loading…
Reference in New Issue