From 4bfd2770179989d5ade3d018004dc15fa5b102bf Mon Sep 17 00:00:00 2001 From: Michael Lutz Date: Sun, 27 Dec 2015 16:13:19 +0100 Subject: Codechange: [Win32] Use OS function for mouse tracking if present. --- src/video/win32_v.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 23794cb32..4534b87be 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -38,6 +38,9 @@ #define PM_QS_INPUT 0x20000 #endif +typedef BOOL (WINAPI *PFNTRACKMOUSEEVENT)(LPTRACKMOUSEEVENT lpEventTrack); +static PFNTRACKMOUSEEVENT _pTrackMouseEvent = NULL; + static struct { HWND main_wnd; HBITMAP dib_sect; @@ -747,7 +750,16 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP * tracking the mouse for exiting the window */ if (!_cursor.in_window) { _cursor.in_window = true; - SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); + if (_pTrackMouseEvent != NULL) { + TRACKMOUSEEVENT tme; + tme.cbSize = sizeof(tme); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hwnd; + + _pTrackMouseEvent(&tme); + } else { + SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); + } } if (_cursor.fix_at) { @@ -1038,6 +1050,9 @@ static void RegisterWndClass() registered = true; if (!RegisterClass(&wnd)) usererror("RegisterClass failed"); + + /* Dynamically load mouse tracking, as it doesn't exist on Windows 95. */ + _pTrackMouseEvent = (PFNTRACKMOUSEEVENT)GetProcAddress(GetModuleHandle(_T("User32")), "TrackMouseEvent"); } } -- cgit v1.2.3-54-g00ecf