xserver: Branch 'master' - 7 commits

Keith Packard keithp at kemper.freedesktop.org
Sun Apr 18 22:12:34 PDT 2010


 hw/xfree86/common/xf86Xinput.c |    8 +-
 include/xkbsrv.h               |   12 ----
 xkb/Makefile.am                |    4 -
 xkb/ddxDevBtn.c                |   77 --------------------------
 xkb/ddxFakeMtn.c               |  118 -----------------------------------------
 xkb/xkbActions.c               |   97 +++++++++++++++++++++++++++++----
 6 files changed, 89 insertions(+), 227 deletions(-)

New commits:
commit b3ab978df861c08298f57529e3db980489055c35
Merge: a92b2c2... 0ad022a...
Author: Keith Packard <keithp at keithp.com>
Date:   Sun Apr 18 22:01:40 2010 -0700

    Merge remote branch 'whot/for-keith'

commit 0ad022a729bafa56cc7b5d241f567444a34514ad
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Apr 14 10:54:29 2010 +1000

    xkb: rename XkbFakeDeviceButton and XkbFakeDeviceMotion, move into xkbActions.c
    
    The name XkbDDXFakeDeviceButton and XkbDDXFakeDeviceMotion is somewhat
    misleading, there's no DDX involved in the game at all anymore.
    
    This removes XkbFakeDeviceMotion and XkbFakeDeviceButton from the API where
    it arguably shouldn't have been in the first place.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 239b7a1..a5d25d0 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -768,19 +768,6 @@ extern _X_EXPORT void XkbDDXUpdateDeviceIndicators(
 	CARD32			/* newState */
 );
 
-extern _X_EXPORT void XkbDDXFakePointerMotion(
-	DeviceIntPtr	/* dev */,
- 	unsigned int	/* flags */,
-	int		/* x */,
-	int		/* y */
-);
-
-extern _X_EXPORT void XkbDDXFakeDeviceButton(
-	DeviceIntPtr	/* dev */,
-	Bool		/* press */,
-	int		/* button */
-);
-
 extern _X_EXPORT int XkbDDXTerminateServer(
 	DeviceIntPtr	/* dev */,
 	KeyCode		/* key */,
diff --git a/xkb/Makefile.am b/xkb/Makefile.am
index e54ce59..fb3ccbf 100644
--- a/xkb/Makefile.am
+++ b/xkb/Makefile.am
@@ -5,11 +5,9 @@ AM_CFLAGS = $(DIX_CFLAGS)
 DDX_SRCS = \
         ddxBeep.c \
         ddxCtrls.c \
-        ddxFakeMtn.c \
         ddxLEDs.c \
         ddxLoad.c \
-        ddxList.c \
-        ddxDevBtn.c
+        ddxList.c
 
 DIX_SRCS = \
         xkb.c \
diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
deleted file mode 100644
index b8a1255..0000000
--- a/xkb/ddxDevBtn.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/************************************************************
-Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc.
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright
-notice appear in all copies and that both that copyright
-notice and this permission notice appear in supporting
-documentation, and that the name of Silicon Graphics not be 
-used in advertising or publicity pertaining to distribution 
-of the software without specific prior written permission.
-Silicon Graphics makes no representation about the suitability 
-of this software for any purpose. It is provided "as is"
-without any express or implied warranty.
-
-SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
-AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
-GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
-OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "inputstr.h"
-#include <xkbsrv.h>
-#include "mi.h"
-
-void
-XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
-{
-    EventListPtr        events;
-    int                 nevents, i;
-    DeviceIntPtr        ptr;
-
-    /* If dev is a slave device, and the SD is attached, do nothing. If we'd
-     * post through the attached master pointer we'd get duplicate events.
-     *
-     * if dev is a master keyboard, post through the XTEST device
-     *
-     * if dev is a floating slave, post through the device itself.
-     */
-
-    if (IsMaster(dev))
-        ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
-    else if (!dev->u.master)
-        ptr = dev;
-    else
-        return;
-
-    events = InitEventList(GetMaximumEventsNum());
-    OsBlockSignals();
-    nevents = GetPointerEvents(events, ptr,
-                               press ? ButtonPress : ButtonRelease, button,
-                               0 /* flags */, 0 /* first */,
-                               0 /* num_val */, NULL);
-    OsReleaseSignals();
-
-    for (i = 0; i < nevents; i++)
-        mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
-
-    FreeEventList(events, GetMaximumEventsNum());
-}
diff --git a/xkb/ddxFakeMtn.c b/xkb/ddxFakeMtn.c
deleted file mode 100644
index b383716..0000000
--- a/xkb/ddxFakeMtn.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/************************************************************
-Copyright (c) 1993 by Silicon Graphics Computer Systems, Inc.
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright
-notice appear in all copies and that both that copyright
-notice and this permission notice appear in supporting
-documentation, and that the name of Silicon Graphics not be 
-used in advertising or publicity pertaining to distribution 
-of the software without specific prior written permission.
-Silicon Graphics makes no representation about the suitability 
-of this software for any purpose. It is provided "as is"
-without any express or implied warranty.
-
-SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 
-AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
-GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 
-OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "inputstr.h"
-#include <xkbsrv.h>
-#include "mi.h"
-
-void
-XkbDDXFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
-{
-    EventListPtr        events;
-    int                 nevents, i;
-    DeviceIntPtr        ptr;
-    int                 gpe_flags = 0;
-
-    if (!dev->u.master)
-        ptr = dev;
-    else
-        ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
-
-    if (flags & XkbSA_MoveAbsoluteX || flags & XkbSA_MoveAbsoluteY)
-        gpe_flags = POINTER_ABSOLUTE;
-    else
-        gpe_flags = POINTER_RELATIVE;
-
-    events = InitEventList(GetMaximumEventsNum());
-    OsBlockSignals();
-    nevents = GetPointerEvents(events, ptr,
-                               MotionNotify, 0,
-                               gpe_flags, 0, 2, (int[]){x, y});
-    OsReleaseSignals();
-
-    for (i = 0; i < nevents; i++)
-        mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
-
-    FreeEventList(events, GetMaximumEventsNum());
-}
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 4c7bce2..6a9943f 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -40,11 +40,15 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <xkbsrv.h>
 #include "xkb.h"
 #include <ctype.h>
+#include "mi.h"
 #define EXTENSION_EVENT_BASE 64
 
 static int xkbDevicePrivateKeyIndex;
 DevPrivateKey xkbDevicePrivateKey = &xkbDevicePrivateKeyIndex;
 
+static void XkbFakeDeviceButton(DeviceIntPtr dev,Bool press,int button);
+static void XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y);
+
 void
 xkbUnwrapProc(DeviceIntPtr device, DeviceHandleProc proc,
                    pointer data)
@@ -479,7 +483,7 @@ int		dx,dy;
 	dx= xkbi->mouseKeysDX;
 	dy= xkbi->mouseKeysDY;
     }
-    XkbDDXFakePointerMotion(xkbi->device, xkbi->mouseKeysFlags,dx,dy);
+    XkbFakePointerMotion(xkbi->device, xkbi->mouseKeysFlags,dx,dy);
     return xkbi->desc->ctrls->mk_interval;
 }
 
@@ -507,7 +511,7 @@ Bool	accel;
 	accel= ((pAction->ptr.flags&XkbSA_NoAcceleration)==0);
 	x= XkbPtrActionX(&pAction->ptr);
 	y= XkbPtrActionY(&pAction->ptr);
-	XkbDDXFakePointerMotion(xkbi->device, pAction->ptr.flags,x,y);
+	XkbFakePointerMotion(xkbi->device, pAction->ptr.flags,x,y);
 	AccessXCancelRepeatKey(xkbi,keycode);
 	xkbi->mouseKeysAccel= accel&&
 		(xkbi->desc->ctrls->enabled_ctrls&XkbMouseKeysAccelMask);
@@ -554,7 +558,7 @@ _XkbFilterPointerBtn(	XkbSrvInfoPtr	xkbi,
 			((pAction->btn.flags&XkbSA_LockNoLock)==0)) {
 		    xkbi->lockedPtrButtons|= (1<<button);
 		    AccessXCancelRepeatKey(xkbi,keycode);
-		    XkbDDXFakeDeviceButton(xkbi->device, 1, button);
+		    XkbFakeDeviceButton(xkbi->device, 1, button);
 		    filter->upAction.type= XkbSA_NoAction;
 		}
 		break;
@@ -565,12 +569,12 @@ _XkbFilterPointerBtn(	XkbSrvInfoPtr	xkbi,
 		    if (pAction->btn.count>0) {
 			nClicks= pAction->btn.count;
 			for (i=0;i<nClicks;i++) {
-			    XkbDDXFakeDeviceButton(xkbi->device, 1, button);
-			    XkbDDXFakeDeviceButton(xkbi->device, 0, button);
+			    XkbFakeDeviceButton(xkbi->device, 1, button);
+			    XkbFakeDeviceButton(xkbi->device, 0, button);
 			}
 			filter->upAction.type= XkbSA_NoAction;
 		    }
-		    else XkbDDXFakeDeviceButton(xkbi->device, 1, button);
+		    else XkbFakeDeviceButton(xkbi->device, 1, button);
 		}
 		break;
 	    case XkbSA_SetPtrDflt:
@@ -626,7 +630,7 @@ _XkbFilterPointerBtn(	XkbSrvInfoPtr	xkbi,
 		}
 		xkbi->lockedPtrButtons&= ~(1<<button);
 	    case XkbSA_PtrBtn:
-		XkbDDXFakeDeviceButton(xkbi->device, 0, button);
+		XkbFakeDeviceButton(xkbi->device, 0, button);
 		break;
 	}
 	filter->active = 0;
@@ -964,7 +968,7 @@ int		button;
 		if ((pAction->devbtn.flags&XkbSA_LockNoLock)||
 		    BitIsOn(dev->button->down, button))
 		    return 0;
-		XkbDDXFakeDeviceButton(dev,TRUE,button);
+		XkbFakeDeviceButton(dev,TRUE,button);
 		filter->upAction.type= XkbSA_NoAction;
 		break;
 	    case XkbSA_DeviceBtn:
@@ -972,12 +976,12 @@ int		button;
 		    int nClicks,i;
 		    nClicks= pAction->btn.count;
 		    for (i=0;i<nClicks;i++) {
-			XkbDDXFakeDeviceButton(dev,TRUE,button);
-			XkbDDXFakeDeviceButton(dev,FALSE,button);
+			XkbFakeDeviceButton(dev,TRUE,button);
+			XkbFakeDeviceButton(dev,FALSE,button);
 		    }
 		    filter->upAction.type= XkbSA_NoAction;
 		}
-		else XkbDDXFakeDeviceButton(dev,TRUE,button);
+		else XkbFakeDeviceButton(dev,TRUE,button);
 		break;
 	}
     }
@@ -996,10 +1000,10 @@ int		button;
 		if ((filter->upAction.devbtn.flags&XkbSA_LockNoUnlock)||
 		    !BitIsOn(dev->button->down, button))
 		    return 0;
-		XkbDDXFakeDeviceButton(dev,FALSE,button);
+		XkbFakeDeviceButton(dev,FALSE,button);
 		break;
 	    case XkbSA_DeviceBtn:
-		XkbDDXFakeDeviceButton(dev,FALSE,button);
+		XkbFakeDeviceButton(dev,FALSE,button);
 		break;
 	}
 	filter->active = 0;
@@ -1316,3 +1320,70 @@ xkbStateNotify	sn;
     return;
 }
 
+static void
+XkbFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
+{
+    EventListPtr        events;
+    int                 nevents, i;
+    DeviceIntPtr        ptr;
+    int                 gpe_flags = 0;
+
+    if (!dev->u.master)
+        ptr = dev;
+    else
+        ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
+
+    if (flags & XkbSA_MoveAbsoluteX || flags & XkbSA_MoveAbsoluteY)
+        gpe_flags = POINTER_ABSOLUTE;
+    else
+        gpe_flags = POINTER_RELATIVE;
+
+    events = InitEventList(GetMaximumEventsNum());
+    OsBlockSignals();
+    nevents = GetPointerEvents(events, ptr,
+                               MotionNotify, 0,
+                               gpe_flags, 0, 2, (int[]){x, y});
+    OsReleaseSignals();
+
+    for (i = 0; i < nevents; i++)
+        mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
+
+    FreeEventList(events, GetMaximumEventsNum());
+}
+
+static void
+XkbFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
+{
+    EventListPtr        events;
+    int                 nevents, i;
+    DeviceIntPtr        ptr;
+
+    /* If dev is a slave device, and the SD is attached, do nothing. If we'd
+     * post through the attached master pointer we'd get duplicate events.
+     *
+     * if dev is a master keyboard, post through the XTEST device
+     *
+     * if dev is a floating slave, post through the device itself.
+     */
+
+    if (IsMaster(dev))
+        ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
+    else if (!dev->u.master)
+        ptr = dev;
+    else
+        return;
+
+    events = InitEventList(GetMaximumEventsNum());
+    OsBlockSignals();
+    nevents = GetPointerEvents(events, ptr,
+                               press ? ButtonPress : ButtonRelease, button,
+                               0 /* flags */, 0 /* first */,
+                               0 /* num_val */, NULL);
+    OsReleaseSignals();
+
+
+    for (i = 0; i < nevents; i++)
+        mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
+
+    FreeEventList(events, GetMaximumEventsNum());
+}
commit da4e2e382828d7ba460766709368ec6214b286dd
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Apr 14 09:48:53 2010 +1000

    xkb: purge unneeded includes from ddxDevBtn.c
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>
    Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>

diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index b8a222d..b8a1255 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -28,18 +28,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <dix-config.h>
 #endif
 
-#include <stdio.h>
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/keysym.h>
 #include "inputstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "eventstr.h"
 #include <xkbsrv.h>
 #include "mi.h"
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XIproto.h>
 
 void
 XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
commit f4106c02318fcc4b534224df5b95a58aff555fb4
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Apr 13 14:44:59 2010 +1000

    xkb: use GPE for XKB fake motion events.
    
    Section 4.6.1 of the XKB spec says that "the initial event always moves the
    cursor the distance specified in the action [...]", so skip the
    POINTER_ACCELERATE flag for GPE, it would cause double-acceleration.
    
    Potential regression - GPE expects the coordinates to be either relative or
    both. XKB in theory allows for x to be relative and y to be absolute (or
    vice versa). Let's pretend that scenario has no users.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Simon Thum <simon.thum at gmx.de>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/include/xkbsrv.h b/include/xkbsrv.h
index 278ff76..239b7a1 100644
--- a/include/xkbsrv.h
+++ b/include/xkbsrv.h
@@ -769,6 +769,7 @@ extern _X_EXPORT void XkbDDXUpdateDeviceIndicators(
 );
 
 extern _X_EXPORT void XkbDDXFakePointerMotion(
+	DeviceIntPtr	/* dev */,
  	unsigned int	/* flags */,
 	int		/* x */,
 	int		/* y */
diff --git a/xkb/ddxFakeMtn.c b/xkb/ddxFakeMtn.c
index f90d209..b383716 100644
--- a/xkb/ddxFakeMtn.c
+++ b/xkb/ddxFakeMtn.c
@@ -28,91 +28,37 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <dix-config.h>
 #endif
 
-#include <stdio.h>
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/keysym.h>
 #include "inputstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
 #include <xkbsrv.h>
-#include <X11/extensions/XI.h>
-
-#ifdef PANORAMIX
-#include "panoramiX.h"
-#include "panoramiXsrv.h"
-#endif
-
-#include "mipointer.h"
-#include "mipointrst.h"
+#include "mi.h"
 
 void
-XkbDDXFakePointerMotion(unsigned flags,int x,int y)
+XkbDDXFakePointerMotion(DeviceIntPtr dev, unsigned flags,int x,int y)
 {
-int 		   oldX,oldY;
-ScreenPtr	   pScreen, oldScreen;
-
-    GetSpritePosition(inputInfo.pointer, &oldX, &oldY);
-    pScreen = oldScreen = GetSpriteWindow(inputInfo.pointer)->drawable.pScreen;
-
-#ifdef PANORAMIX
-    if (!noPanoramiXExtension) {
-	BoxRec box;
-	int i;
+    EventListPtr        events;
+    int                 nevents, i;
+    DeviceIntPtr        ptr;
+    int                 gpe_flags = 0;
 
-	if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
-							    oldX, oldY, &box)) {
-	    FOR_NSCREENS(i) {
-		if(i == pScreen->myNum)
-		    continue;
-		if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i],
-				   oldX, oldY, &box)) {
-		    pScreen = screenInfo.screens[i];
-		    break;
-		}
-	    }
-	}
-	oldScreen = pScreen;
-
-	if (flags&XkbSA_MoveAbsoluteX)
-	     oldX=  x;
-	else oldX+= x;
-	if (flags&XkbSA_MoveAbsoluteY)
-	     oldY=  y;
-	else oldY+= y;
+    if (!dev->u.master)
+        ptr = dev;
+    else
+        ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
 
-	if(!POINT_IN_REGION(pScreen, &XineramaScreenRegions[pScreen->myNum],
-							    oldX, oldY, &box)) {
-	    FOR_NSCREENS(i) {
-		if(i == pScreen->myNum)
-		    continue;
-		if(POINT_IN_REGION(pScreen, &XineramaScreenRegions[i],
-				   oldX, oldY, &box)) {
-		    pScreen = screenInfo.screens[i];
-		    break;
-		}
-	    }
-	}
-	oldX -= panoramiXdataPtr[pScreen->myNum].x;
-	oldY -= panoramiXdataPtr[pScreen->myNum].y;
-    }
+    if (flags & XkbSA_MoveAbsoluteX || flags & XkbSA_MoveAbsoluteY)
+        gpe_flags = POINTER_ABSOLUTE;
     else
-#endif
-    {
-	if (flags&XkbSA_MoveAbsoluteX)
-	     oldX=  x;
-	else oldX+= x;
-	if (flags&XkbSA_MoveAbsoluteY)
-	     oldY=  y;
-	else oldY+= y;
+        gpe_flags = POINTER_RELATIVE;
+
+    events = InitEventList(GetMaximumEventsNum());
+    OsBlockSignals();
+    nevents = GetPointerEvents(events, ptr,
+                               MotionNotify, 0,
+                               gpe_flags, 0, 2, (int[]){x, y});
+    OsReleaseSignals();
 
-#define GetScreenPrivate(s) ((miPointerScreenPtr)dixLookupPrivate(&(s)->devPrivates, miPointerScreenKey))
-	(*(GetScreenPrivate(oldScreen))->screenFuncs->CursorOffScreen)
-	    (&pScreen, &oldX, &oldY);
-    }
+    for (i = 0; i < nevents; i++)
+        mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
 
-    if (pScreen != oldScreen)
-	NewCurrentScreen(inputInfo.pointer, pScreen, oldX, oldY);
-    if (pScreen->SetCursorPosition)
-	(*pScreen->SetCursorPosition)(inputInfo.pointer, pScreen, oldX, oldY, TRUE);
+    FreeEventList(events, GetMaximumEventsNum());
 }
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 2cdb6fc..4c7bce2 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -479,7 +479,7 @@ int		dx,dy;
 	dx= xkbi->mouseKeysDX;
 	dy= xkbi->mouseKeysDY;
     }
-    XkbDDXFakePointerMotion(xkbi->mouseKeysFlags,dx,dy);
+    XkbDDXFakePointerMotion(xkbi->device, xkbi->mouseKeysFlags,dx,dy);
     return xkbi->desc->ctrls->mk_interval;
 }
 
@@ -507,7 +507,7 @@ Bool	accel;
 	accel= ((pAction->ptr.flags&XkbSA_NoAcceleration)==0);
 	x= XkbPtrActionX(&pAction->ptr);
 	y= XkbPtrActionY(&pAction->ptr);
-	XkbDDXFakePointerMotion(pAction->ptr.flags,x,y);
+	XkbDDXFakePointerMotion(xkbi->device, pAction->ptr.flags,x,y);
 	AccessXCancelRepeatKey(xkbi,keycode);
 	xkbi->mouseKeysAccel= accel&&
 		(xkbi->desc->ctrls->enabled_ctrls&XkbMouseKeysAccelMask);
commit 6c42c8c356be305dc7f3f92ad8d58675da8c2f07
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Wed Apr 14 10:51:41 2010 +1000

    xkb: Guard against SIGIO updates during PointerKeys.
    
    In theory, an event coming in during GPE could reset our lastSlave, leading
    to rather interesting events lateron.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Simon Thum <simon.thum at gmx.de>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index 3bee84b..b8a222d 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -64,11 +64,12 @@ XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
         return;
 
     events = InitEventList(GetMaximumEventsNum());
+    OsBlockSignals();
     nevents = GetPointerEvents(events, ptr,
                                press ? ButtonPress : ButtonRelease, button,
                                0 /* flags */, 0 /* first */,
                                0 /* num_val */, NULL);
-
+    OsReleaseSignals();
 
     for (i = 0; i < nevents; i++)
         mieqProcessDeviceEvent(ptr, (InternalEvent*)events[i].event, NULL);
commit 108457dff816569453a2d88cd72595fa7eb02479
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Apr 13 14:41:07 2010 +1000

    xkb: Post PointerKeys through the XTEST device.
    
    Posting an event through a master device may cause pointer jumps once
    lastSlave == master, caused by double scaling. To avoid this, post the fake
    event generated by XKB through the XTEST device instead.
    
    Fedora bug #560356 <https://bugzilla.redhat.com/560356>
    Tested-by: Andrew McNabb
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Daniel Stone <daniel at fooishbar.org>

diff --git a/xkb/ddxDevBtn.c b/xkb/ddxDevBtn.c
index 94630d1..3bee84b 100644
--- a/xkb/ddxDevBtn.c
+++ b/xkb/ddxDevBtn.c
@@ -51,13 +51,13 @@ XkbDDXFakeDeviceButton(DeviceIntPtr dev,Bool press,int button)
     /* If dev is a slave device, and the SD is attached, do nothing. If we'd
      * post through the attached master pointer we'd get duplicate events.
      *
-     * if dev is a master keyboard, post through the master pointer.
+     * if dev is a master keyboard, post through the XTEST device
      *
      * if dev is a floating slave, post through the device itself.
      */
 
     if (IsMaster(dev))
-        ptr = GetMaster(dev, MASTER_POINTER);
+        ptr = GetXTestDevice(GetMaster(dev, MASTER_POINTER));
     else if (!dev->u.master)
         ptr = dev;
     else
commit a780e5b3638a0ff81301fc68aca15b47ba0befb7
Author: Benjamin Tissoires <tissoire at cena.fr>
Date:   Wed Apr 14 17:27:51 2010 +0200

    xf86ScaleAxis: support for high resolution devices
    
    High resolution devices was generating integer overflow.
    For instance the wacom Cintiq 21UX has an axis value up to
    87000. Thus the term (dSx * (Cx - Rxlow)) is greater than
    MAX_INT32.
    
    Using 64bits integer avoids such problem.
    
    Signed-off-by: Philippe Ribet <ribet at cena.fr>
    Signed-off-by: Benjamin Tissoires <tissoire at cena.fr>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
index 7723ba6..dba3370 100644
--- a/hw/xfree86/common/xf86Xinput.c
+++ b/hw/xfree86/common/xf86Xinput.c
@@ -86,6 +86,7 @@
 #include "windowstr.h"	/* screenIsSaved */
 
 #include <stdarg.h>
+#include <stdint.h>          /* for int64_t */
 
 #include <X11/Xpoll.h>
 
@@ -1177,12 +1178,11 @@ xf86ScaleAxis(int	Cx,
               int	Rxlow )
 {
     int X;
-    int dSx = Sxhigh - Sxlow;
-    int dRx = Rxhigh - Rxlow;
+    int64_t dSx = Sxhigh - Sxlow;
+    int64_t dRx = Rxhigh - Rxlow;
 
-    dSx = Sxhigh - Sxlow;
     if (dRx) {
-	X = ((dSx * (Cx - Rxlow)) / dRx) + Sxlow;
+	X = (int)(((dSx * (Cx - Rxlow)) / dRx) + Sxlow);
     }
     else {
 	X = 0;


More information about the xorg-commit mailing list