Merged mouse dll into USER.
diff --git a/Makefile.in b/Makefile.in
index dc61207..c7aab69 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -31,7 +31,6 @@
dlls/advapi32 \
dlls/crtdll \
dlls/kernel \
- dlls/mouse \
dlls/ntdll \
files \
graphics \
@@ -97,7 +96,6 @@
console/console.o \
dlls/advapi32/advapi32.o \
dlls/crtdll/crtdll.o \
- dlls/mouse/mouse.o \
dlls/ntdll/ntdll.o \
files/files.o \
graphics/graphics.o \
diff --git a/configure b/configure
index 7a73d1c..5c3d1b8 100755
--- a/configure
+++ b/configure
@@ -6208,7 +6208,6 @@
dlls/imm32/Makefile
dlls/kernel/Makefile
dlls/lzexpand/Makefile
-dlls/mouse/Makefile
dlls/mpr/Makefile
dlls/msacm/Makefile
dlls/msacm32/Makefile
@@ -6442,7 +6441,6 @@
dlls/imm32/Makefile
dlls/kernel/Makefile
dlls/lzexpand/Makefile
-dlls/mouse/Makefile
dlls/mpr/Makefile
dlls/msacm/Makefile
dlls/msacm32/Makefile
diff --git a/configure.in b/configure.in
index 2bd3ae2..0a8d8c2 100644
--- a/configure.in
+++ b/configure.in
@@ -1002,7 +1002,6 @@
dlls/imm32/Makefile
dlls/kernel/Makefile
dlls/lzexpand/Makefile
-dlls/mouse/Makefile
dlls/mpr/Makefile
dlls/msacm/Makefile
dlls/msacm32/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index 5834ef6..ea9bdf1 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -85,6 +85,7 @@
keyboard \
lzexpand \
mmsystem \
+ mouse \
msvideo \
ole2 \
ole2conv \
@@ -303,7 +304,7 @@
liburlmon.@LIBEXT@: urlmon/liburlmon.@LIBEXT@
$(RM) $@ && $(LN_S) urlmon/liburlmon.@LIBEXT@ $@
-libuser32.@LIBEXT@ libuser.@LIBEXT@ libkeyboard.@LIBEXT@ libddeml.@LIBEXT@ libdisplay.@LIBEXT@: user/libuser32.@LIBEXT@
+libuser32.@LIBEXT@ libuser.@LIBEXT@ libkeyboard.@LIBEXT@ libddeml.@LIBEXT@ libdisplay.@LIBEXT@ libmouse.@LIBEXT@: user/libuser32.@LIBEXT@
$(RM) $@ && $(LN_S) user/libuser32.@LIBEXT@ $@
libversion.@LIBEXT@ libver.@LIBEXT@: version/libversion.@LIBEXT@
diff --git a/dlls/dinput/Makefile.in b/dlls/dinput/Makefile.in
index b0abec7..edca4c9 100644
--- a/dlls/dinput/Makefile.in
+++ b/dlls/dinput/Makefile.in
@@ -4,6 +4,7 @@
VPATH = @srcdir@
MODULE = dinput
SOVERSION = 1.0
+IMPORTS = user32
SPEC_SRCS = dinput.spec
diff --git a/dlls/dinput/dinput.spec b/dlls/dinput/dinput.spec
index a7daa79..eb3894d 100644
--- a/dlls/dinput/dinput.spec
+++ b/dlls/dinput/dinput.spec
@@ -1,6 +1,8 @@
name dinput
type win32
+import user32.dll
+
@ stdcall DirectInputCreateA(long long ptr ptr) DirectInputCreateA
@ stub DirectInputCreateW
@ stdcall DllCanUnloadNow() DINPUT_DllCanUnloadNow
diff --git a/dlls/mouse/.cvsignore b/dlls/mouse/.cvsignore
deleted file mode 100644
index 7f188e4..0000000
--- a/dlls/mouse/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-Makefile
-mouse.spec.c
-mouserc.s
diff --git a/dlls/mouse/Makefile.in b/dlls/mouse/Makefile.in
deleted file mode 100644
index baf19e4..0000000
--- a/dlls/mouse/Makefile.in
+++ /dev/null
@@ -1,21 +0,0 @@
-DEFS = @DLLFLAGS@ -D__WINE__
-TOPSRCDIR = @top_srcdir@
-TOPOBJDIR = ../..
-SRCDIR = @srcdir@
-VPATH = @srcdir@
-MODULE = mouse
-WRCEXTRA = -s -w16 -pmouse
-SPEC_SRCS = mouse.spec
-
-C_SRCS = \
- mouse_main.c
-
-RC_SRCS = \
- mouserc.rc
-
-all: $(MODULE).o
-
-@MAKE_RULES@
-
-### Dependencies:
-
diff --git a/dlls/ttydrv/ttydrv_main.c b/dlls/ttydrv/ttydrv_main.c
index 0c7f056..2ac0abe 100644
--- a/dlls/ttydrv/ttydrv_main.c
+++ b/dlls/ttydrv/ttydrv_main.c
@@ -12,7 +12,6 @@
#include "gdi.h"
#include "message.h"
#include "monitor.h"
-#include "mouse.h"
#include "user.h"
#include "win.h"
#include "debugtools.h"
@@ -43,7 +42,6 @@
TTYDRV_MOUSE_Init,
TTYDRV_MOUSE_SetCursor,
TTYDRV_MOUSE_MoveCursor,
- TTYDRV_MOUSE_EnableWarpPointer,
/* screen saver functions */
TTYDRV_GetScreenSaveActive,
TTYDRV_SetScreenSaveActive,
diff --git a/dlls/user/.cvsignore b/dlls/user/.cvsignore
index 2c62a4c..102a6ef 100644
--- a/dlls/user/.cvsignore
+++ b/dlls/user/.cvsignore
@@ -3,4 +3,5 @@
Makefile
disp.s
libuser32.so.1.0
+mouserc.s
thunk.glue.c
diff --git a/dlls/user/Makefile.in b/dlls/user/Makefile.in
index e627057..95b2cb4 100644
--- a/dlls/user/Makefile.in
+++ b/dlls/user/Makefile.in
@@ -4,24 +4,27 @@
VPATH = @srcdir@
MODULE = user32
SOVERSION = 1.0
-WRCEXTRA = -s -w16 -pdisplay
-ALTNAMES = user keyboard ddeml display
+WRCEXTRA = -w16
+ALTNAMES = user keyboard ddeml display mouse
SPEC_SRCS = \
user32.spec \
user.spec \
keyboard.spec \
ddeml.spec \
- display.spec
+ display.spec \
+ mouse.spec
C_SRCS = \
ddeml.c \
display.c \
+ mouse.c \
user_main.c \
thunk.c
RC_SRCS = \
- disp.rc
+ disp.rc \
+ mouserc.rc
GLUE = thunk.c
diff --git a/dlls/user/display.c b/dlls/user/display.c
index e7005f8..5eb9ad7 100644
--- a/dlls/user/display.c
+++ b/dlls/user/display.c
@@ -6,7 +6,6 @@
*/
#include "debugtools.h"
-#include "mouse.h"
#include "windef.h"
#include "user.h"
#include "wine/winuser16.h"
diff --git a/dlls/user/display.spec b/dlls/user/display.spec
index d1fdab9..a325063 100644
--- a/dlls/user/display.spec
+++ b/dlls/user/display.spec
@@ -1,6 +1,6 @@
name display
type win16
-rsrc display
+rsrc disp
1 stub BitBlt
2 stub ColorInfo
diff --git a/dlls/mouse/mouse_main.c b/dlls/user/mouse.c
similarity index 60%
rename from dlls/mouse/mouse_main.c
rename to dlls/user/mouse.c
index ccfc08a..a74a8a3 100644
--- a/dlls/mouse/mouse_main.c
+++ b/dlls/user/mouse.c
@@ -12,16 +12,28 @@
#include "builtin16.h"
#include "module.h"
#include "mouse.h"
-#include "monitor.h"
-#include "user.h"
#include "windef.h"
#include "wingdi.h"
#include "winuser.h"
-#include "win.h"
#include "wine/winbase16.h"
DEFAULT_DEBUG_CHANNEL(event);
+#include "pshpack1.h"
+typedef struct _MOUSEINFO
+{
+ BYTE msExist;
+ BYTE msRelative;
+ WORD msNumButtons;
+ WORD msRate;
+ WORD msXThreshold;
+ WORD msYThreshold;
+ WORD msXRes;
+ WORD msYRes;
+ WORD msMouseCommPort;
+} MOUSEINFO, *LPMOUSEINFO;
+#include "poppack.h"
+
/**********************************************************************/
static LPMOUSE_EVENT_PROC DefMouseEventProc = NULL;
@@ -49,17 +61,9 @@
*/
VOID WINAPI MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc)
{
- static BOOL initDone = FALSE;
-
THUNK_Free( (FARPROC)DefMouseEventProc );
DefMouseEventProc = lpMouseEventProc;
-
- /* Now initialize the mouse driver */
- if (initDone == FALSE)
- {
- USER_Driver->pInitMouse();
- initDone = TRUE;
- }
+ USER_Driver->pInitMouse( lpMouseEventProc );
}
static VOID WINAPI MOUSE_CallMouseEventProc( FARPROC16 proc,
@@ -96,41 +100,5 @@
{
THUNK_Free( (FARPROC)DefMouseEventProc );
DefMouseEventProc = 0;
-}
-
-/***********************************************************************
- * MOUSE_SendEvent
- */
-void MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
- DWORD keyState, DWORD time, HWND hWnd )
-{
- int width = MONITOR_GetWidth (&MONITOR_PrimaryMonitor);
- int height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
- int iWndsLocks;
- WINE_MOUSEEVENT wme;
-
- if ( !DefMouseEventProc ) return;
-
- TRACE("(%04lX,%ld,%ld)\n", mouseStatus, posX, posY );
-
- if (mouseStatus & MOUSEEVENTF_MOVE) {
- if (mouseStatus & MOUSEEVENTF_ABSOLUTE) {
- /* Relative mouse movements seems not to be scaled as absolute ones */
- posX = (((long)posX << 16) + width-1) / width;
- posY = (((long)posY << 16) + height-1) / height;
- }
- }
-
- wme.magic = WINE_MOUSEEVENT_MAGIC;
- wme.time = time;
- wme.hWnd = hWnd;
- wme.keyState = keyState;
-
- USER_Driver->pEnableWarpPointer(FALSE);
- /* To avoid deadlocks, we have to suspend all locks on windows structures
- before the program control is passed to the mouse driver */
- iWndsLocks = WIN_SuspendWndsLock();
- DefMouseEventProc( mouseStatus, posX, posY, 0, (DWORD)&wme );
- WIN_RestoreWndsLock(iWndsLocks);
- USER_Driver->pEnableWarpPointer(TRUE);
+ USER_Driver->pInitMouse( 0 );
}
diff --git a/dlls/mouse/mouse.spec b/dlls/user/mouse.spec
similarity index 95%
rename from dlls/mouse/mouse.spec
rename to dlls/user/mouse.spec
index e9b2ca4..ef4d8dc 100644
--- a/dlls/mouse/mouse.spec
+++ b/dlls/user/mouse.spec
@@ -1,6 +1,6 @@
name mouse
type win16
-rsrc mouse
+rsrc mouserc
1 pascal16 Inquire(ptr) MOUSE_Inquire
2 pascal16 Enable(segptr) WIN16_MOUSE_Enable
diff --git a/dlls/mouse/mouserc.rc b/dlls/user/mouserc.rc
similarity index 100%
rename from dlls/mouse/mouserc.rc
rename to dlls/user/mouserc.rc
diff --git a/dlls/user/user_main.c b/dlls/user/user_main.c
index 55748a2..6318cce 100644
--- a/dlls/user/user_main.c
+++ b/dlls/user/user_main.c
@@ -14,7 +14,6 @@
#include "keyboard.h"
#include "menu.h"
#include "message.h"
-#include "mouse.h"
#include "queue.h"
#include "spy.h"
#include "sysmetrics.h"
diff --git a/dlls/x11drv/x11drv_main.c b/dlls/x11drv/x11drv_main.c
index 38b7e76..fb00206 100644
--- a/dlls/x11drv/x11drv_main.c
+++ b/dlls/x11drv/x11drv_main.c
@@ -54,7 +54,6 @@
X11DRV_MOUSE_Init,
X11DRV_MOUSE_SetCursor,
X11DRV_MOUSE_MoveCursor,
- X11DRV_MOUSE_EnableWarpPointer,
/* screen saver functions */
X11DRV_GetScreenSaveActive,
X11DRV_SetScreenSaveActive,
diff --git a/include/mouse.h b/include/mouse.h
index 4fe6fb8..302c4ee 100644
--- a/include/mouse.h
+++ b/include/mouse.h
@@ -8,29 +8,7 @@
#define __WINE_MOUSE_H
#include "windef.h"
-
-struct tagCURSORICONINFO;
-
-#include "pshpack1.h"
-typedef struct _MOUSEINFO
-{
- BYTE msExist;
- BYTE msRelative;
- WORD msNumButtons;
- WORD msRate;
- WORD msXThreshold;
- WORD msYThreshold;
- WORD msXRes;
- WORD msYRes;
- WORD msMouseCommPort;
-} MOUSEINFO, *LPMOUSEINFO;
-#include "poppack.h"
-
-typedef VOID (CALLBACK *LPMOUSE_EVENT_PROC)(DWORD,DWORD,DWORD,DWORD,DWORD);
-
-WORD WINAPI MOUSE_Inquire(LPMOUSEINFO lpMouseInfo);
-VOID WINAPI MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc);
-VOID WINAPI MOUSE_Disable(VOID);
+#include "user.h"
/* Wine internals */
@@ -44,9 +22,6 @@
} WINE_MOUSEEVENT;
-extern void MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
- DWORD keyState, DWORD time, HWND hWnd );
-
/***********************************
* MouseWheel support (defines)
*/
diff --git a/include/ttydrv.h b/include/ttydrv.h
index ba86666..142f89a 100644
--- a/include/ttydrv.h
+++ b/include/ttydrv.h
@@ -18,6 +18,7 @@
#include "wingdi.h"
#include "wine/winuser16.h"
#include "wine/wingdi16.h"
+#include "user.h"
struct tagBITMAPOBJ;
struct tagCLASS;
@@ -170,10 +171,9 @@
/* TTY mouse driver */
-extern void TTYDRV_MOUSE_Init();
+extern void TTYDRV_MOUSE_Init(LPMOUSE_EVENT_PROC);
extern void TTYDRV_MOUSE_SetCursor(struct tagCURSORICONINFO *lpCursor);
extern void TTYDRV_MOUSE_MoveCursor(WORD wAbsX, WORD wAbsY);
-extern LONG TTYDRV_MOUSE_EnableWarpPointer(BOOL bEnable);
/* TTY windows driver */
diff --git a/include/user.h b/include/user.h
index 741428a..ec5775b 100644
--- a/include/user.h
+++ b/include/user.h
@@ -37,6 +37,8 @@
BOOL auto_repeat;
} KEYBOARD_CONFIG;
+typedef VOID (CALLBACK *LPMOUSE_EVENT_PROC)(DWORD,DWORD,DWORD,DWORD,DWORD);
+
typedef struct tagUSER_DRIVER {
/* event functions */
void (*pSynchronize)(void);
@@ -56,10 +58,9 @@
void (*pGetKeyboardConfig)(KEYBOARD_CONFIG *);
void (*pSetKeyboardConfig)(KEYBOARD_CONFIG *, DWORD);
/* mouse functions */
- void (*pInitMouse)(void);
+ void (*pInitMouse)(LPMOUSE_EVENT_PROC);
void (*pSetCursor)(struct tagCURSORICONINFO *);
void (*pMoveCursor)(WORD, WORD);
- LONG (*pEnableWarpPointer)(BOOL);
/* screen saver functions */
BOOL (*pGetScreenSaveActive)(void);
void (*pSetScreenSaveActive)(BOOL);
@@ -74,4 +75,7 @@
WORD WINAPI UserSignalProc( UINT uCode, DWORD dwThreadOrProcessID,
DWORD dwFlags, HMODULE16 hModule );
+VOID WINAPI MOUSE_Enable(LPMOUSE_EVENT_PROC lpMouseEventProc);
+VOID WINAPI MOUSE_Disable(VOID);
+
#endif /* __WINE_USER_H */
diff --git a/include/x11drv.h b/include/x11drv.h
index ca1deb4..ccbd4ec 100644
--- a/include/x11drv.h
+++ b/include/x11drv.h
@@ -15,9 +15,10 @@
# include <X11/extensions/XShm.h>
#endif /* defined(HAVE_LIBXXSHM) */
-#include "gdi.h"
-#include "winbase.h"
#include "windef.h"
+#include "winbase.h"
+#include "gdi.h"
+#include "user.h"
#define MAX_PIXELFORMATS 8
@@ -393,10 +394,11 @@
/* X11 mouse driver */
-extern void X11DRV_MOUSE_Init();
+extern void X11DRV_MOUSE_Init(LPMOUSE_EVENT_PROC);
extern void X11DRV_MOUSE_SetCursor(struct tagCURSORICONINFO *lpCursor);
extern void X11DRV_MOUSE_MoveCursor(WORD wAbsX, WORD wAbsY);
-extern LONG X11DRV_MOUSE_EnableWarpPointer(BOOL bEnable);
+extern void X11DRV_MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
+ DWORD keyState, DWORD time, HWND hWnd );
/* X11 windows driver */
diff --git a/windows/ttydrv/mouse.c b/windows/ttydrv/mouse.c
index 9e74c4d..1804256 100644
--- a/windows/ttydrv/mouse.c
+++ b/windows/ttydrv/mouse.c
@@ -21,16 +21,8 @@
}
/***********************************************************************
- * TTYDRV_MOUSE_EnableWarpPointer
- */
-LONG TTYDRV_MOUSE_EnableWarpPointer(BOOL bEnable)
-{
- return 0;
-}
-
-/***********************************************************************
* TTYDRV_MOUSE_Init
*/
-void TTYDRV_MOUSE_Init()
+void TTYDRV_MOUSE_Init(LPMOUSE_EVENT_PROC proc)
{
}
diff --git a/windows/x11drv/event.c b/windows/x11drv/event.c
index 660ea0c..229873b 100644
--- a/windows/x11drv/event.c
+++ b/windows/x11drv/event.c
@@ -694,15 +694,15 @@
int yOffset = pWnd? pWnd->rectWindow.top : 0;
WIN_ReleaseWndPtr(pWnd);
- MOUSE_SendEvent( MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,
- xOffset + event->x, yOffset + event->y,
- X11DRV_EVENT_XStateToKeyState( event->state ),
- event->time, hWnd);
+ X11DRV_MOUSE_SendEvent( MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,
+ xOffset + event->x, yOffset + event->y,
+ X11DRV_EVENT_XStateToKeyState( event->state ),
+ event->time, hWnd);
} else {
- MOUSE_SendEvent( MOUSEEVENTF_MOVE,
- event->x_root, event->y_root,
- X11DRV_EVENT_XStateToKeyState( event->state ),
- event->time, hWnd);
+ X11DRV_MOUSE_SendEvent( MOUSEEVENTF_MOVE,
+ event->x_root, event->y_root,
+ X11DRV_EVENT_XStateToKeyState( event->state ),
+ event->time, hWnd);
}
}
@@ -753,10 +753,10 @@
break;
}
- MOUSE_SendEvent( statusCodes[buttonNum],
- xOffset + event->x, yOffset + event->y,
- MAKEWPARAM(keystate,wData),
- event->time, hWnd);
+ X11DRV_MOUSE_SendEvent( statusCodes[buttonNum],
+ xOffset + event->x, yOffset + event->y,
+ MAKEWPARAM(keystate,wData),
+ event->time, hWnd);
}
@@ -801,9 +801,9 @@
return;
}
- MOUSE_SendEvent( statusCodes[buttonNum],
- xOffset + event->x, yOffset + event->y,
- keystate, event->time, hWnd);
+ X11DRV_MOUSE_SendEvent( statusCodes[buttonNum],
+ xOffset + event->x, yOffset + event->y,
+ keystate, event->time, hWnd);
}
diff --git a/windows/x11drv/mouse.c b/windows/x11drv/mouse.c
index 1a09917..eab97ec 100644
--- a/windows/x11drv/mouse.c
+++ b/windows/x11drv/mouse.c
@@ -11,17 +11,19 @@
#include "callback.h"
#include "debugtools.h"
#include "mouse.h"
+#include "monitor.h"
#include "win.h"
#include "windef.h"
#include "x11drv.h"
-DEFAULT_DEBUG_CHANNEL(cursor)
+DEFAULT_DEBUG_CHANNEL(cursor);
/**********************************************************************/
Cursor X11DRV_MOUSE_XCursor = None; /* Current X cursor */
static LONG X11DRV_MOUSE_WarpPointer = 0; /* hack; see DISPLAY_MoveCursor */
+static LPMOUSE_EVENT_PROC DefMouseEventProc = NULL;
/***********************************************************************
* X11DRV_MOUSE_DoSetCursor
@@ -240,33 +242,65 @@
}
/***********************************************************************
- * X11DRV_MOUSE_EnableWarpPointer
- */
-LONG X11DRV_MOUSE_EnableWarpPointer(BOOL bEnable)
-{
- if (bEnable)
- return InterlockedIncrement( &X11DRV_MOUSE_WarpPointer );
- else
- return InterlockedDecrement( &X11DRV_MOUSE_WarpPointer );
-}
-
-/***********************************************************************
* X11DRV_MOUSE_Init
*/
-void X11DRV_MOUSE_Init()
+void X11DRV_MOUSE_Init( LPMOUSE_EVENT_PROC proc )
{
- Window root, child;
- int root_x, root_y, child_x, child_y;
- unsigned int KeyState;
-
- /* Get the current mouse position and simulate an absolute mouse
- movement to initialize the mouse global variables */
- TSXQueryPointer( display, X11DRV_GetXRootWindow(), &root, &child,
- &root_x, &root_y, &child_x, &child_y, &KeyState);
+ static int init_done;
- MOUSE_SendEvent(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,
- root_x, root_y,
- X11DRV_EVENT_XStateToKeyState(KeyState),
- GetTickCount(),
- 0);
+ DefMouseEventProc = proc;
+
+ if (!init_done)
+ {
+ Window root, child;
+ int root_x, root_y, child_x, child_y;
+ unsigned int KeyState;
+
+ init_done = 1;
+ /* Get the current mouse position and simulate an absolute mouse
+ movement to initialize the mouse global variables */
+ TSXQueryPointer( display, X11DRV_GetXRootWindow(), &root, &child,
+ &root_x, &root_y, &child_x, &child_y, &KeyState);
+ X11DRV_MOUSE_SendEvent(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,
+ root_x, root_y, X11DRV_EVENT_XStateToKeyState(KeyState),
+ GetTickCount(), 0 );
+ }
+}
+
+
+/***********************************************************************
+ * X11DRV_MOUSE_SendEvent
+ */
+void X11DRV_MOUSE_SendEvent( DWORD mouseStatus, DWORD posX, DWORD posY,
+ DWORD keyState, DWORD time, HWND hWnd )
+{
+ int width = MONITOR_GetWidth (&MONITOR_PrimaryMonitor);
+ int height = MONITOR_GetHeight(&MONITOR_PrimaryMonitor);
+ int iWndsLocks;
+ WINE_MOUSEEVENT wme;
+
+ if ( !DefMouseEventProc ) return;
+
+ TRACE("(%04lX,%ld,%ld)\n", mouseStatus, posX, posY );
+
+ if (mouseStatus & MOUSEEVENTF_MOVE) {
+ if (mouseStatus & MOUSEEVENTF_ABSOLUTE) {
+ /* Relative mouse movements seems not to be scaled as absolute ones */
+ posX = (((long)posX << 16) + width-1) / width;
+ posY = (((long)posY << 16) + height-1) / height;
+ }
+ }
+
+ wme.magic = WINE_MOUSEEVENT_MAGIC;
+ wme.time = time;
+ wme.hWnd = hWnd;
+ wme.keyState = keyState;
+
+ InterlockedDecrement( &X11DRV_MOUSE_WarpPointer );
+ /* To avoid deadlocks, we have to suspend all locks on windows structures
+ before the program control is passed to the mouse driver */
+ iWndsLocks = WIN_SuspendWndsLock();
+ DefMouseEventProc( mouseStatus, posX, posY, 0, (DWORD)&wme );
+ WIN_RestoreWndsLock(iWndsLocks);
+ InterlockedIncrement( &X11DRV_MOUSE_WarpPointer );
}