From: Paul Gofman pgofman@codeweavers.com
--- dlls/win32u/input.c | 3 +++ dlls/win32u/message.c | 10 ++++++++++ include/ntuser.h | 1 + 3 files changed, 14 insertions(+)
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index c718bd1cbbc..2aae6b4cf1d 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -1794,6 +1794,9 @@ BOOL WINAPI NtUserTrackMouseEvent( TRACKMOUSEEVENT *info ) return FALSE; }
+ if (!is_current_thread_window( info->hwndTrack )) + return send_notify_message( info->hwndTrack, WM_WINE_TRACKMOUSEEVENT, info->dwFlags, info->dwHoverTime, FALSE ); + hover_time = (info->dwFlags & TME_HOVER) ? info->dwHoverTime : HOVER_DEFAULT;
if (hover_time == HOVER_DEFAULT || hover_time == 0) diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index df64e059177..3a587199d13 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -2236,6 +2236,16 @@ static LRESULT handle_internal_message( HWND hwnd, UINT msg, WPARAM wparam, LPAR case WM_WINE_UPDATEWINDOWSTATE: update_window_state( hwnd ); return 0; + case WM_WINE_TRACKMOUSEEVENT: + { + TRACKMOUSEEVENT info; + + info.cbSize = sizeof(info); + info.hwndTrack = hwnd; + info.dwFlags = wparam; + info.dwHoverTime = lparam; + return NtUserTrackMouseEvent( &info ); + } default: if (msg >= WM_WINE_FIRST_DRIVER_MSG && msg <= WM_WINE_LAST_DRIVER_MSG) return user_driver->pWindowMessage( hwnd, msg, wparam, lparam ); diff --git a/include/ntuser.h b/include/ntuser.h index ef09d7e97bb..0cf257d4d07 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -638,6 +638,7 @@ enum wine_internal_message WM_WINE_IME_NOTIFY, WM_WINE_WINDOW_STATE_CHANGED, WM_WINE_UPDATEWINDOWSTATE, + WM_WINE_TRACKMOUSEEVENT, WM_WINE_FIRST_DRIVER_MSG = 0x80001000, /* range of messages reserved for the USER driver */ WM_WINE_CLIPCURSOR = 0x80001ff0, /* internal driver notification messages */ WM_WINE_SETCURSOR,