Call WH_GETMESSAGE hook in PeekMessage too (based on a patch by Rob
Farnum).
diff --git a/windows/message.c b/windows/message.c
index 7a70c99..2e63551 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -1374,11 +1374,12 @@
/***********************************************************************
* PeekMessage32_16 (USER.819)
*/
-BOOL16 WINAPI PeekMessage32_16( LPMSG16_32 lpmsg16_32, HWND16 hwnd,
+BOOL16 WINAPI PeekMessage32_16( SEGPTR msg16_32, HWND16 hwnd,
UINT16 first, UINT16 last, UINT16 flags,
BOOL16 wHaveParamHigh )
{
BOOL ret;
+ MSG32_16 *lpmsg16_32 = (MSG32_16 *)PTR_SEG_TO_LIN(msg16_32);
MSG msg;
ret = MSG_PeekMessage( QMSG_WIN16, &msg, hwnd, first, last, flags, TRUE );
@@ -1394,16 +1395,17 @@
if ( wHaveParamHigh )
lpmsg16_32->wParamHigh = HIWORD(msg.wParam);
+ HOOK_CallHooks16( WH_GETMESSAGE, HC_ACTION, flags & PM_REMOVE, (LPARAM)msg16_32 );
return ret;
}
/***********************************************************************
* PeekMessage16 (USER.109)
*/
-BOOL16 WINAPI PeekMessage16( LPMSG16 lpmsg, HWND16 hwnd,
+BOOL16 WINAPI PeekMessage16( SEGPTR msg, HWND16 hwnd,
UINT16 first, UINT16 last, UINT16 flags )
{
- return PeekMessage32_16( (LPMSG16_32)lpmsg, hwnd, first, last, flags, FALSE );
+ return PeekMessage32_16( msg, hwnd, first, last, flags, FALSE );
}
/***********************************************************************
@@ -1412,7 +1414,14 @@
BOOL WINAPI PeekMessageA( LPMSG lpmsg, HWND hwnd,
UINT min, UINT max, UINT wRemoveMsg)
{
- return MSG_PeekMessage( QMSG_WIN32A, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+ BOOL ret = MSG_PeekMessage( QMSG_WIN32A, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+
+ TRACE( "peekmessage %04x, hwnd %04x, filter(%04x - %04x)\n",
+ lpmsg->message, hwnd, min, max );
+
+ if (ret) HOOK_CallHooksA( WH_GETMESSAGE, HC_ACTION,
+ wRemoveMsg & PM_REMOVE, (LPARAM)lpmsg );
+ return ret;
}
/***********************************************************************
@@ -1450,7 +1459,10 @@
UINT wRemoveMsg /* removal flags */
)
{
- return MSG_PeekMessage( QMSG_WIN32W, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+ BOOL ret = MSG_PeekMessage( QMSG_WIN32W, lpmsg, hwnd, min, max, wRemoveMsg, TRUE );
+ if (ret) HOOK_CallHooksW( WH_GETMESSAGE, HC_ACTION,
+ wRemoveMsg & PM_REMOVE, (LPARAM)lpmsg );
+ return ret;
}
@@ -1479,7 +1491,7 @@
TRACE( "message %04x, hwnd %04x, filter(%04x - %04x)\n",
lpmsg16_32->msg.message, hWnd, first, last );
- HOOK_CallHooks16( WH_GETMESSAGE, HC_ACTION, 0, (LPARAM)msg16_32 );
+ HOOK_CallHooks16( WH_GETMESSAGE, HC_ACTION, PM_REMOVE, (LPARAM)msg16_32 );
return lpmsg16_32->msg.message != WM_QUIT;
}
@@ -1501,7 +1513,7 @@
TRACE( "message %04x, hwnd %04x, filter(%04x - %04x)\n",
lpmsg->message, hwnd, min, max );
- HOOK_CallHooksA( WH_GETMESSAGE, HC_ACTION, 0, (LPARAM)lpmsg );
+ HOOK_CallHooksA( WH_GETMESSAGE, HC_ACTION, PM_REMOVE, (LPARAM)lpmsg );
return lpmsg->message != WM_QUIT;
}
@@ -1544,7 +1556,7 @@
TRACE( "message %04x, hwnd %04x, filter(%04x - %04x)\n",
lpmsg->message, hwnd, min, max );
- HOOK_CallHooksW( WH_GETMESSAGE, HC_ACTION, 0, (LPARAM)lpmsg );
+ HOOK_CallHooksW( WH_GETMESSAGE, HC_ACTION, PM_REMOVE, (LPARAM)lpmsg );
return lpmsg->message != WM_QUIT;
}
diff --git a/windows/win.c b/windows/win.c
index f7103d6..6342c64 100644
--- a/windows/win.c
+++ b/windows/win.c
@@ -3223,8 +3223,8 @@
*/
BOOL WINAPI DragDetect( HWND hWnd, POINT pt )
{
- MSG16 msg;
- RECT16 rect;
+ MSG msg;
+ RECT rect;
rect.left = pt.x - wDragWidth;
rect.right = pt.x + wDragWidth;
@@ -3236,7 +3236,7 @@
while(1)
{
- while(PeekMessage16(&msg ,0 ,WM_MOUSEFIRST ,WM_MOUSELAST ,PM_REMOVE))
+ while(PeekMessageA(&msg ,0 ,WM_MOUSEFIRST ,WM_MOUSELAST ,PM_REMOVE))
{
if( msg.message == WM_LBUTTONUP )
{
@@ -3245,7 +3245,10 @@
}
if( msg.message == WM_MOUSEMOVE )
{
- if( !PtInRect16( &rect, MAKEPOINT16(msg.lParam) ) )
+ POINT tmp;
+ tmp.x = LOWORD(msg.lParam);
+ tmp.y = HIWORD(msg.lParam);
+ if( !PtInRect( &rect, tmp ))
{
ReleaseCapture();
return 1;
@@ -3263,7 +3266,7 @@
DWORD WINAPI DragObject16( HWND16 hwndScope, HWND16 hWnd, UINT16 wObj,
HANDLE16 hOfStruct, WORD szList, HCURSOR16 hCursor )
{
- MSG16 msg;
+ MSG msg;
LPDRAGINFO lpDragInfo;
SEGPTR spDragInfo;
HCURSOR16 hDragCursor=0, hOldCursor=0, hBummer=0;
@@ -3318,11 +3321,12 @@
do
{
do{ WaitMessage(); }
- while( !PeekMessage16(&msg,0,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE) );
+ while( !PeekMessageA(&msg,0,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE) );
*(lpDragInfo+1) = *lpDragInfo;
- lpDragInfo->pt = msg.pt;
+ lpDragInfo->pt.x = msg.pt.x;
+ lpDragInfo->pt.y = msg.pt.y;
/* update DRAGINFO struct */
TRACE_(msg)("lpDI->hScope = %04x\n",lpDragInfo->hScope);