diff options
author | michi_cc <michi_cc@openttd.org> | 2017-12-09 19:21:45 +0000 |
---|---|---|
committer | michi_cc <michi_cc@openttd.org> | 2017-12-09 19:21:45 +0000 |
commit | c722cb26b8bc61d720c8a7a037e3c8639851599c (patch) | |
tree | 85dd1fd48f3bee7fcc45a129cb8afeb3b4c9ac7a | |
parent | e856e3cca8831be0853a838ccc4f8a1e1decda07 (diff) | |
download | openttd-c722cb26b8bc61d720c8a7a037e3c8639851599c.tar.xz |
(svn r27935) -Fix [FS#6629]: [Win32] Right mouse scrolling didn't work properly with the Windows 10 Fall Creators Update.
-rw-r--r-- | src/video/win32_v.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp index 4a9861b64..23794cb32 100644 --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -34,6 +34,10 @@ #define MAPVK_VK_TO_CHAR (2) #endif +#ifndef PM_QS_INPUT +#define PM_QS_INPUT 0x20000 +#endif + static struct { HWND main_wnd; HBITMAP dib_sect; @@ -737,7 +741,6 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP case WM_MOUSEMOVE: { int x = (int16)LOWORD(lParam); int y = (int16)HIWORD(lParam); - POINT pt; /* If the mouse was not in the window and it has moved it means it has * come into the window, so start drawing the mouse. Also start @@ -747,7 +750,18 @@ static LRESULT CALLBACK WndProcGdi(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP SetTimer(hwnd, TID_POLLMOUSE, MOUSE_POLL_DELAY, (TIMERPROC)TrackMouseTimerProc); } - if (_cursor.UpdateCursorPosition(x, y, true)) { + if (_cursor.fix_at) { + /* Get all queued mouse events now in case we have to warp the cursor. In the + * end, we only care about the current mouse position and not bygone events. */ + MSG m; + while (PeekMessage(&m, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE | PM_NOYIELD | PM_QS_INPUT)) { + x = (int16)LOWORD(m.lParam); + y = (int16)HIWORD(m.lParam); + } + } + + if (_cursor.UpdateCursorPosition(x, y, false)) { + POINT pt; pt.x = _cursor.pos.x; pt.y = _cursor.pos.y; ClientToScreen(hwnd, &pt); |