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
--- 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