[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