[prev in list] [next in list] [prev in thread] [next in thread]
List: freedesktop-compiz
Subject: Re: [compiz] status of input redirection
From: David Reveman <davidr () novell ! com>
Date: 2007-06-04 21:06:20
Message-ID: 1180991180.6832.66.camel () ion ! ximian
[Download RAW message or body]
On Sat, 2007-06-02 at 04:29 +0300, Daniel Stone wrote:
> On Fri, Jun 01, 2007 at 03:47:17PM -0400, David Reveman wrote:
> > + switch (events[i].u.u.type) {
> > + case MotionNotify:
> > + case ButtonPress:
> > + case ButtonRelease:
> > + case KeyPress:
> > + case KeyRelease:
> > + case EnterNotify:
> > + case LeaveNotify:
>
> Hi,
> This needs to be aware of Xi events.
Yea, I forgot about that. Will the attached patch work or are those
device events not using the keyButtonPointer structure?
-David
["xserver-input-transform-xi-1.patch" (xserver-input-transform-xi-1.patch)]
--- a/dix/events.c
+++ b/dix/events.c
@@ -4688,6 +4688,7 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events)
{
WindowPtr pWin;
int x, y, dx, dy;
+ Bool keyButtonEvent = FALSE;
switch (events[i].u.u.type) {
case MotionNotify:
@@ -4697,30 +4698,42 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events)
case KeyRelease:
case EnterNotify:
case LeaveNotify:
- pWin = LookupIDByType (events[i].u.keyButtonPointer.event,
- RT_WINDOW);
- if (pWin)
- {
- x = events[i].u.keyButtonPointer.rootX;
- y = events[i].u.keyButtonPointer.rootY;
-
- /*
- * rootX and rootY are in screen coordinate space.
- * Transform to windows root coordinate space before writing
- * events to client.
- */
- CompositeXYScreenToWindowRootCoordinate (pWin, x, y, &x, &y);
-
- dx = x - events[i].u.keyButtonPointer.rootX;
- dy = y - events[i].u.keyButtonPointer.rootY;
-
- events[i].u.keyButtonPointer.rootX += dx;
- events[i].u.keyButtonPointer.rootY += dy;
- events[i].u.keyButtonPointer.eventX += dx;
- events[i].u.keyButtonPointer.eventY += dy;
- }
+ keyButtonEvent = TRUE;
+ break;
+ default:
+ if (events[i].u.u.type == DeviceMotionNotify ||
+ events[i].u.u.type == DeviceButtonPress ||
+ events[i].u.u.type == DeviceButtonRelease ||
+ events[i].u.u.type == DeviceKeyPress ||
+ events[i].u.u.type == DeviceKeyRelease)
+ keyButtonEvent = TRUE;
break;
}
+
+ if (!keyButtonEvent)
+ continue;
+
+ pWin = LookupIDByType (events[i].u.keyButtonPointer.event, RT_WINDOW);
+ if (pWin)
+ {
+ x = events[i].u.keyButtonPointer.rootX;
+ y = events[i].u.keyButtonPointer.rootY;
+
+ /*
+ * rootX and rootY are in screen coordinate space.
+ * Transform to windows root coordinate space before writing
+ * events to client.
+ */
+ CompositeXYScreenToWindowRootCoordinate (pWin, x, y, &x, &y);
+
+ dx = x - events[i].u.keyButtonPointer.rootX;
+ dy = y - events[i].u.keyButtonPointer.rootY;
+
+ events[i].u.keyButtonPointer.rootX += dx;
+ events[i].u.keyButtonPointer.rootY += dy;
+ events[i].u.keyButtonPointer.eventX += dx;
+ events[i].u.keyButtonPointer.eventY += dy;
+ }
}
#endif
_______________________________________________
compiz mailing list
compiz@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/compiz
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic