Win32: Fix mouse button messages lost by capture

Fixes #954.
This commit is contained in:
Camilla Löwy 2017-02-26 17:23:56 +01:00
parent 106a617fa8
commit dd96d0ac93
2 changed files with 19 additions and 4 deletions

View File

@ -151,6 +151,7 @@ information on what to include when reporting a bug.
a loader but no ICD (#916) a loader but no ICD (#916)
- [Win32] Bugfix: Non-iconified full sreeen windows did not prevent screen - [Win32] Bugfix: Non-iconified full sreeen windows did not prevent screen
blanking or password enabled screensavers (#851) blanking or password enabled screensavers (#851)
- [Win32] Bugfix: Mouse capture logic lost secondary release messages (#954)
- [X11] Replaced `_GLFW_HAS_XF86VM` compile-time option with dynamic loading - [X11] Replaced `_GLFW_HAS_XF86VM` compile-time option with dynamic loading
- [X11] Bugfix: `glfwGetVideoMode` would segfault on Cygwin/X - [X11] Bugfix: `glfwGetVideoMode` would segfault on Cygwin/X
- [X11] Bugfix: Dynamic X11 library loading did not use full sonames (#941) - [X11] Bugfix: Dynamic X11 library loading did not use full sonames (#941)

View File

@ -614,7 +614,7 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
case WM_MBUTTONUP: case WM_MBUTTONUP:
case WM_XBUTTONUP: case WM_XBUTTONUP:
{ {
int button, action; int i, button, action;
if (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP) if (uMsg == WM_LBUTTONDOWN || uMsg == WM_LBUTTONUP)
button = GLFW_MOUSE_BUTTON_LEFT; button = GLFW_MOUSE_BUTTON_LEFT;
@ -631,16 +631,30 @@ static LRESULT CALLBACK windowProc(HWND hWnd, UINT uMsg,
uMsg == WM_MBUTTONDOWN || uMsg == WM_XBUTTONDOWN) uMsg == WM_MBUTTONDOWN || uMsg == WM_XBUTTONDOWN)
{ {
action = GLFW_PRESS; action = GLFW_PRESS;
SetCapture(hWnd);
} }
else else
{
action = GLFW_RELEASE; action = GLFW_RELEASE;
ReleaseCapture();
for (i = 0; i < GLFW_MOUSE_BUTTON_LAST; i++)
{
if (window->mouseButtons[i] == GLFW_PRESS)
break;
} }
if (i == GLFW_MOUSE_BUTTON_LAST)
SetCapture(hWnd);
_glfwInputMouseClick(window, button, action, getKeyMods()); _glfwInputMouseClick(window, button, action, getKeyMods());
for (i = 0; i < GLFW_MOUSE_BUTTON_LAST; i++)
{
if (window->mouseButtons[i] == GLFW_PRESS)
break;
}
if (i == GLFW_MOUSE_BUTTON_LAST)
ReleaseCapture();
if (uMsg == WM_XBUTTONDOWN || uMsg == WM_XBUTTONUP) if (uMsg == WM_XBUTTONDOWN || uMsg == WM_XBUTTONUP)
return TRUE; return TRUE;