|
|
70130e |
From 9702f1ac244758172c3f8edbfc26e99fe1d52fbe Mon Sep 17 00:00:00 2001
|
|
|
70130e |
From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= <krh@redhat.com>
|
|
|
70130e |
Date: Fri, 18 Sep 2009 22:09:03 -0400
|
|
|
70130e |
Subject: [PATCH 09/39] Add redirect window for input device feature
|
|
|
70130e |
|
|
|
70130e |
---
|
|
|
70130e |
Xi/exevents.c | 13 +++++++++++++
|
|
|
70130e |
dix/events.c | 11 ++++++++++-
|
|
|
70130e |
include/exevents.h | 4 ++++
|
|
|
70130e |
include/inputstr.h | 2 ++
|
|
|
70130e |
4 files changed, 29 insertions(+), 1 deletion(-)
|
|
|
70130e |
|
|
|
70130e |
diff --git a/Xi/exevents.c b/Xi/exevents.c
|
|
|
70130e |
index 5dc9020..69b4038 100644
|
|
|
70130e |
--- a/Xi/exevents.c
|
|
|
70130e |
+++ b/Xi/exevents.c
|
|
|
70130e |
@@ -2025,6 +2025,19 @@ DeliverTouchEvents(DeviceIntPtr dev, TouchPointInfoPtr ti,
|
|
|
70130e |
}
|
|
|
70130e |
}
|
|
|
70130e |
|
|
|
70130e |
+void
|
|
|
70130e |
+SetDeviceRedirectWindow(DeviceIntPtr dev, WindowPtr window)
|
|
|
70130e |
+{
|
|
|
70130e |
+ SpritePtr pSprite = dev->spriteInfo->sprite;
|
|
|
70130e |
+ DeviceIntPtr mouse;
|
|
|
70130e |
+
|
|
|
70130e |
+ mouse = IsMaster(dev) ? dev : GetMaster(dev, MASTER_POINTER);
|
|
|
70130e |
+
|
|
|
70130e |
+ pSprite->redirectWindow = window;
|
|
|
70130e |
+
|
|
|
70130e |
+ CheckMotion(NULL, mouse);
|
|
|
70130e |
+}
|
|
|
70130e |
+
|
|
|
70130e |
int
|
|
|
70130e |
InitProximityClassDeviceStruct(DeviceIntPtr dev)
|
|
|
70130e |
{
|
|
|
70130e |
diff --git a/dix/events.c b/dix/events.c
|
|
|
70130e |
index 4632bb7..9caa8b0 100644
|
|
|
70130e |
--- a/dix/events.c
|
|
|
70130e |
+++ b/dix/events.c
|
|
|
70130e |
@@ -2877,7 +2877,16 @@ XYToWindow(SpritePtr pSprite, int x, int y)
|
|
|
70130e |
BoxRec box;
|
|
|
70130e |
|
|
|
70130e |
pSprite->spriteTraceGood = 1; /* root window still there */
|
|
|
70130e |
- pWin = RootWindow(pSprite)->firstChild;
|
|
|
70130e |
+ if (pSprite->redirectWindow == PointerRootWin) {
|
|
|
70130e |
+ return RootWindow(pSprite);
|
|
|
70130e |
+ }
|
|
|
70130e |
+ else if (pSprite->redirectWindow) {
|
|
|
70130e |
+ pWin = pSprite->redirectWindow;
|
|
|
70130e |
+ pSprite->spriteTrace[pSprite->spriteTraceGood++] = pWin;
|
|
|
70130e |
+ pWin = pWin->firstChild;
|
|
|
70130e |
+ }
|
|
|
70130e |
+ else
|
|
|
70130e |
+ pWin = RootWindow(pSprite)->firstChild;
|
|
|
70130e |
while (pWin) {
|
|
|
70130e |
if ((pWin->mapped) &&
|
|
|
70130e |
(x >= pWin->drawable.x - wBorderWidth(pWin)) &&
|
|
|
70130e |
diff --git a/include/exevents.h b/include/exevents.h
|
|
|
70130e |
index 321fc42..ba93be3 100644
|
|
|
70130e |
--- a/include/exevents.h
|
|
|
70130e |
+++ b/include/exevents.h
|
|
|
70130e |
@@ -162,6 +162,10 @@ extern void
|
|
|
70130e |
ProcessOtherEvent(InternalEvent * /* ev */ ,
|
|
|
70130e |
DeviceIntPtr /* other */ );
|
|
|
70130e |
|
|
|
70130e |
+extern _X_EXPORT void
|
|
|
70130e |
+ SetDeviceRedirectWindow(DeviceIntPtr /* dev */ ,
|
|
|
70130e |
+ WindowPtr /* window */ );
|
|
|
70130e |
+
|
|
|
70130e |
extern int
|
|
|
70130e |
CheckGrabValues(ClientPtr /* client */ ,
|
|
|
70130e |
GrabParameters * /* param */ );
|
|
|
70130e |
diff --git a/include/inputstr.h b/include/inputstr.h
|
|
|
70130e |
index dc36c5d..09471cf 100644
|
|
|
70130e |
--- a/include/inputstr.h
|
|
|
70130e |
+++ b/include/inputstr.h
|
|
|
70130e |
@@ -246,6 +246,8 @@ typedef struct _SpriteRec {
|
|
|
70130e |
ScreenPtr pEnqueueScreen;
|
|
|
70130e |
ScreenPtr pDequeueScreen;
|
|
|
70130e |
|
|
|
70130e |
+ WindowPtr redirectWindow;
|
|
|
70130e |
+
|
|
|
70130e |
} SpriteRec;
|
|
|
70130e |
|
|
|
70130e |
typedef struct _KeyClassRec {
|
|
|
70130e |
--
|
|
|
70130e |
1.8.3.1
|
|
|
70130e |
|