Adapted to new input event handling.
diff --git a/objects/cursoricon.c b/objects/cursoricon.c
index 47ba56c..b59be5b 100644
--- a/objects/cursoricon.c
+++ b/objects/cursoricon.c
@@ -45,7 +45,7 @@
#include "debug.h"
#include "task.h"
#include "user.h"
-#include "keyboard.h"
+#include "input.h"
#include "x11drv.h"
#include "winerror.h"
diff --git a/windows/event.c b/windows/event.c
index 4c876f5..5858387 100644
--- a/windows/event.c
+++ b/windows/event.c
@@ -36,10 +36,11 @@
#include "drive.h"
#include "shell.h"
#include "keyboard.h"
+#include "mouse.h"
#include "debug.h"
#include "dde_proc.h"
#include "winsock.h"
-#include "callback.h"
+#include "mouse.h"
#define NB_BUTTONS 3 /* Windows can handle 3 buttons */
@@ -62,11 +63,6 @@
/* X context to associate a hwnd to an X window */
static XContext winContext = 0;
-static INT16 captureHT = HTCLIENT;
-static HWND32 captureWnd = 0;
-static BOOL32 InputEnabled = TRUE;
-static BOOL32 SwappedButtons = FALSE;
-
static Atom wmProtocols = None;
static Atom wmDeleteWindow = None;
static Atom dndProtocol = None;
@@ -112,8 +108,6 @@
static void EVENT_GetGeometry( Window win, int *px, int *py,
unsigned int *pwidth, unsigned int *pheight );
-static void EVENT_SendMouseEvent( WORD mouseStatus, WORD deltaX, WORD deltaY,
- WORD buttonCount, DWORD extraInfo );
/***********************************************************************
* EVENT_Init
@@ -178,18 +172,15 @@
{
case KeyPress:
case KeyRelease:
- if (!pWnd) return;
- if (InputEnabled) EVENT_Key( pWnd, (XKeyEvent*)event );
+ EVENT_Key( pWnd, (XKeyEvent*)event );
break;
case ButtonPress:
- if (InputEnabled)
- EVENT_ButtonPress( pWnd, (XButtonEvent*)event );
+ EVENT_ButtonPress( pWnd, (XButtonEvent*)event );
break;
case ButtonRelease:
- if (InputEnabled)
- EVENT_ButtonRelease( pWnd, (XButtonEvent*)event );
+ EVENT_ButtonRelease( pWnd, (XButtonEvent*)event );
break;
case MotionNotify:
@@ -201,12 +192,9 @@
problems if the event order is important. I'm not yet seen
of any problems. Jon 7/6/96.
*/
- if (InputEnabled)
- {
- while (TSXCheckTypedWindowEvent(display,((XAnyEvent *)event)->window,
- MotionNotify, event));
- EVENT_MotionNotify( pWnd, (XMotionEvent*)event );
- }
+ while (TSXCheckTypedWindowEvent(display,((XAnyEvent *)event)->window,
+ MotionNotify, event));
+ EVENT_MotionNotify( pWnd, (XMotionEvent*)event );
break;
case FocusIn:
@@ -650,6 +638,25 @@
return kstate;
}
+/***********************************************************************
+ * EVENT_QueryPointer
+ */
+BOOL32 EVENT_QueryPointer( DWORD *posX, DWORD *posY, DWORD *state )
+{
+ Window root, child;
+ int rootX, rootY, winX, winY;
+ unsigned int xstate;
+
+ if (!TSXQueryPointer( display, rootWindow, &root, &child,
+ &rootX, &rootY, &winX, &winY, &xstate ))
+ return FALSE;
+
+ *posX = (DWORD)winX;
+ *posY = (DWORD)winY;
+ *state = EVENT_XStateToKeyState( xstate );
+
+ return TRUE;
+}
/***********************************************************************
* EVENT_Expose
@@ -726,16 +733,11 @@
int xOffset = pWnd? pWnd->rectWindow.left : 0;
int yOffset = pWnd? pWnd->rectWindow.top : 0;
- if (pWnd)
- hardware_event( WM_MOUSEMOVE, EVENT_XStateToKeyState( event->state ), 0L,
- xOffset + event->x,
- yOffset + event->y,
- event->time - MSG_WineStartTicks, pWnd->hwndSelf );
-
- EVENT_SendMouseEvent( ME_MOVE,
- xOffset + event->x,
- yOffset + event->y,
- 0, 0 );
+ MOUSE_SendEvent( MOUSEEVENTF_MOVE,
+ xOffset + event->x, yOffset + event->y,
+ EVENT_XStateToKeyState( event->state ),
+ event->time - MSG_WineStartTicks,
+ pWnd? pWnd->hwndSelf : 0 );
}
@@ -746,15 +748,12 @@
*/
void EVENT_DummyMotionNotify(void)
{
- Window root, child;
- int rootX, rootY, winX, winY;
- unsigned int state;
+ DWORD winX, winY, state;
- if (TSXQueryPointer( display, rootWindow, &root, &child,
- &rootX, &rootY, &winX, &winY, &state ))
+ if ( EVENT_QueryPointer( &winX, &winY, &state ) )
{
- hardware_event( WM_MOUSEMOVE, EVENT_XStateToKeyState( state ), 0L,
- winX, winY, GetTickCount(), 0 );
+ MOUSE_SendEvent( MOUSEEVENTF_MOVE, winX, winY, state,
+ GetTickCount(), 0 );
}
}
@@ -764,31 +763,20 @@
*/
static void EVENT_ButtonPress( WND *pWnd, XButtonEvent *event )
{
- static WORD messages[NB_BUTTONS] =
- { WM_LBUTTONDOWN, WM_MBUTTONDOWN, WM_RBUTTONDOWN };
static WORD statusCodes[NB_BUTTONS] =
- { ME_LDOWN, 0, ME_RDOWN };
+ { MOUSEEVENTF_LEFTDOWN, MOUSEEVENTF_MIDDLEDOWN, MOUSEEVENTF_RIGHTDOWN };
int buttonNum = event->button - 1;
int xOffset = pWnd? pWnd->rectWindow.left : 0;
int yOffset = pWnd? pWnd->rectWindow.top : 0;
if (buttonNum >= NB_BUTTONS) return;
- if (SwappedButtons) buttonNum = NB_BUTTONS - 1 - buttonNum;
- MouseButtonsStates[buttonNum] = TRUE;
- AsyncMouseButtonsStates[buttonNum] = TRUE;
- if (pWnd)
- hardware_event( messages[buttonNum],
- EVENT_XStateToKeyState( event->state ), 0L,
- xOffset + event->x,
- yOffset + event->y,
- event->time - MSG_WineStartTicks, pWnd->hwndSelf );
-
- EVENT_SendMouseEvent( statusCodes[buttonNum],
- xOffset + event->x,
- yOffset + event->y,
- 0, 0 );
+ MOUSE_SendEvent( statusCodes[buttonNum],
+ xOffset + event->x, yOffset + event->y,
+ EVENT_XStateToKeyState( event->state ),
+ event->time - MSG_WineStartTicks,
+ pWnd? pWnd->hwndSelf : 0 );
}
@@ -797,30 +785,20 @@
*/
static void EVENT_ButtonRelease( WND *pWnd, XButtonEvent *event )
{
- static const WORD messages[NB_BUTTONS] =
- { WM_LBUTTONUP, WM_MBUTTONUP, WM_RBUTTONUP };
static WORD statusCodes[NB_BUTTONS] =
- { ME_LUP, 0, ME_RUP };
+ { MOUSEEVENTF_LEFTUP, MOUSEEVENTF_MIDDLEUP, MOUSEEVENTF_RIGHTUP };
int buttonNum = event->button - 1;
int xOffset = pWnd? pWnd->rectWindow.left : 0;
int yOffset = pWnd? pWnd->rectWindow.top : 0;
if (buttonNum >= NB_BUTTONS) return;
- if (SwappedButtons) buttonNum = NB_BUTTONS - 1 - buttonNum;
- MouseButtonsStates[buttonNum] = FALSE;
- if (pWnd)
- hardware_event( messages[buttonNum],
- EVENT_XStateToKeyState( event->state ), 0L,
- xOffset + event->x,
- yOffset + event->y,
- event->time - MSG_WineStartTicks, pWnd->hwndSelf );
-
- EVENT_SendMouseEvent( statusCodes[buttonNum],
- xOffset + event->x,
- yOffset + event->y,
- 0, 0 );
+ MOUSE_SendEvent( statusCodes[buttonNum],
+ xOffset + event->x, yOffset + event->y,
+ EVENT_XStateToKeyState( event->state ),
+ event->time - MSG_WineStartTicks,
+ pWnd? pWnd->hwndSelf : 0 );
}
@@ -1412,263 +1390,3 @@
return;
}
-/**********************************************************************
- * EVENT_Capture
- *
- * We need this to be able to generate double click messages
- * when menu code captures mouse in the window without CS_DBLCLK style.
- */
-HWND32 EVENT_Capture(HWND32 hwnd, INT16 ht)
-{
- HWND32 capturePrev = captureWnd;
-
- if (!hwnd)
- {
- captureWnd = 0L;
- captureHT = 0;
- }
- else
- {
- WND* wndPtr = WIN_FindWndPtr( hwnd );
- if (wndPtr)
- {
- TRACE(win, "(0x%04x)\n", hwnd );
- captureWnd = hwnd;
- captureHT = ht;
- }
- }
-
- if( capturePrev && capturePrev != captureWnd )
- {
- WND* wndPtr = WIN_FindWndPtr( capturePrev );
- if( wndPtr && (wndPtr->flags & WIN_ISWIN32) )
- SendMessage32A( capturePrev, WM_CAPTURECHANGED, 0L, hwnd);
- }
- return capturePrev;
-}
-
-/**********************************************************************
- * EVENT_GetCaptureInfo
- */
-INT16 EVENT_GetCaptureInfo()
-{
- return captureHT;
-}
-
-/**********************************************************************
- * SetCapture16 (USER.18)
- */
-HWND16 WINAPI SetCapture16( HWND16 hwnd )
-{
- return (HWND16)EVENT_Capture( hwnd, HTCLIENT );
-}
-
-
-/**********************************************************************
- * SetCapture32 (USER32.464)
- */
-HWND32 WINAPI SetCapture32( HWND32 hwnd )
-{
- return EVENT_Capture( hwnd, HTCLIENT );
-}
-
-
-/**********************************************************************
- * ReleaseCapture (USER.19) (USER32.439)
- */
-void WINAPI ReleaseCapture(void)
-{
- TRACE(win, "captureWnd=%04x\n", captureWnd );
- if( captureWnd ) EVENT_Capture( 0, 0 );
-}
-
-
-/**********************************************************************
- * GetCapture16 (USER.236)
- */
-HWND16 WINAPI GetCapture16(void)
-{
- return captureWnd;
-}
-
-
-/**********************************************************************
- * GetCapture32 (USER32.208)
- */
-HWND32 WINAPI GetCapture32(void)
-{
- return captureWnd;
-}
-
-
-
-/***********************************************************************
- * Mouse driver routines:
- */
-
-#pragma pack(1)
-typedef struct _MOUSEINFO
-{
- BYTE msExist;
- BYTE msRelative;
- WORD msNumButtons;
- WORD msRate;
- WORD msXThreshold;
- WORD msYThreshold;
- WORD msXRes;
- WORD msYRes;
- WORD msMouseCommPort;
-} MOUSEINFO;
-#pragma pack(4)
-
-static SEGPTR MouseEventProc = 0;
-
-/***********************************************************************
- * MouseInquire (MOUSE.1)
- */
-
-WORD WINAPI MouseInquire(MOUSEINFO *mouseInfo)
-{
- mouseInfo->msExist = TRUE;
- mouseInfo->msRelative = FALSE;
- mouseInfo->msNumButtons = 2;
- mouseInfo->msRate = 34; /* the DDK says so ... */
- mouseInfo->msXThreshold = 0;
- mouseInfo->msYThreshold = 0;
- mouseInfo->msXRes = 0;
- mouseInfo->msYRes = 0;
- mouseInfo->msMouseCommPort = 0;
-
- return sizeof(MOUSEINFO);
-}
-
-/***********************************************************************
- * MouseEnable (MOUSE.2)
- */
-VOID WINAPI MouseEnable(SEGPTR eventProc)
-{
- MouseEventProc = eventProc;
-}
-
-/***********************************************************************
- * MouseDisable (MOUSE.3)
- */
-VOID WINAPI MouseDisable(VOID)
-{
- MouseEventProc = 0;
-}
-
-/***********************************************************************
- * EVENT_SendMouseEvent
- */
-static void EVENT_SendMouseEvent( WORD mouseStatus, WORD deltaX, WORD deltaY,
- WORD buttonCount, DWORD extraInfo )
-{
- CONTEXT context;
-
- if ( !MouseEventProc ) return;
-
- TRACE( event, "(%04X,%d,%d,%d,%ld)\n", mouseStatus, deltaX, deltaY, buttonCount, extraInfo );
-
- mouseStatus |= 0x8000;
- deltaX = (((long)deltaX << 16) + screenWidth-1) / screenWidth;
- deltaY = (((long)deltaY << 16) + screenHeight-1) / screenHeight;
-
- memset( &context, 0, sizeof(context) );
- CS_reg(&context) = SELECTOROF( MouseEventProc );
- EIP_reg(&context) = OFFSETOF( MouseEventProc );
- EAX_reg(&context) = mouseStatus;
- EBX_reg(&context) = deltaX;
- ECX_reg(&context) = deltaY;
- EDX_reg(&context) = buttonCount;
- ESI_reg(&context) = LOWORD( extraInfo );
- EDI_reg(&context) = HIWORD( extraInfo );
-
- Callbacks->CallRegisterShortProc( &context, 0 );
-}
-
-
-
-
-/***********************************************************************
- * GetMouseEventProc (USER.337)
- */
-FARPROC16 WINAPI GetMouseEventProc(void)
-{
- HMODULE16 hmodule = GetModuleHandle16("USER");
- return NE_GetEntryPoint( hmodule, NE_GetOrdinal( hmodule, "Mouse_Event" ));
-}
-
-
-/***********************************************************************
- * Mouse_Event (USER.299)
- */
-void WINAPI Mouse_Event( CONTEXT *context )
-{
- /* Register values:
- * AX = mouse event
- * BX = horizontal displacement if AX & ME_MOVE
- * CX = vertical displacement if AX & ME_MOVE
- * DX = button state (?)
- * SI = mouse event flags (?)
- */
- Window root, child;
- int rootX, rootY, winX, winY;
- unsigned int state;
-
- if (AX_reg(context) & ME_MOVE)
- {
- /* We have to actually move the cursor */
- TSXWarpPointer( display, rootWindow, None, 0, 0, 0, 0,
- (short)BX_reg(context), (short)CX_reg(context) );
- return;
- }
- if (!TSXQueryPointer( display, rootWindow, &root, &child,
- &rootX, &rootY, &winX, &winY, &state )) return;
- if (AX_reg(context) & ME_LDOWN)
- hardware_event( WM_LBUTTONDOWN, EVENT_XStateToKeyState( state ),
- 0L, winX, winY, GetTickCount(), 0 );
- if (AX_reg(context) & ME_LUP)
- hardware_event( WM_LBUTTONUP, EVENT_XStateToKeyState( state ),
- 0L, winX, winY, GetTickCount(), 0 );
- if (AX_reg(context) & ME_RDOWN)
- hardware_event( WM_RBUTTONDOWN, EVENT_XStateToKeyState( state ),
- 0L, winX, winY, GetTickCount(), 0 );
- if (AX_reg(context) & ME_RUP)
- hardware_event( WM_RBUTTONUP, EVENT_XStateToKeyState( state ),
- 0L, winX, winY, GetTickCount(), 0 );
-}
-
-
-/**********************************************************************
- * EnableHardwareInput (USER.331)
- */
-BOOL16 WINAPI EnableHardwareInput(BOOL16 bEnable)
-{
- BOOL16 bOldState = InputEnabled;
- FIXME(event,"(%d) - stub\n", bEnable);
- InputEnabled = bEnable;
- return bOldState;
-}
-
-
-/***********************************************************************
- * SwapMouseButton16 (USER.186)
- */
-BOOL16 WINAPI SwapMouseButton16( BOOL16 fSwap )
-{
- BOOL16 ret = SwappedButtons;
- SwappedButtons = fSwap;
- return ret;
-}
-
-
-/***********************************************************************
- * SwapMouseButton32 (USER32.537)
- */
-BOOL32 WINAPI SwapMouseButton32( BOOL32 fSwap )
-{
- BOOL32 ret = SwappedButtons;
- SwappedButtons = fSwap;
- return ret;
-}
diff --git a/windows/message.c b/windows/message.c
index 7df8516..907c7c4 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -16,7 +16,7 @@
#include "sysmetrics.h"
#include "heap.h"
#include "hook.h"
-#include "keyboard.h"
+#include "input.h"
#include "spy.h"
#include "winpos.h"
#include "atom.h"