Commit d5ddb3cb91f5ad2553093c6b75b976e5c9e6dff8

Sam Lantinga 2016-10-14T08:40:21

Fixed bug 3453 - First mouse button input after a drag and drop event is ignored Olav Sorensen After a drag and drop event, any following mouse button input (down/up) doesn't generate an event. Clicking any mouse button a *second* time generates an event like it should. Further investigation shows that the new SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH logic also causes this issue in other cases, like the first time you open the program and click the mouse.

diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index 882d5fd..02768fb 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -401,20 +401,22 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
             minimized = HIWORD(wParam);
             if (!minimized && (LOWORD(wParam) != WA_INACTIVE)) {
-                if (GetAsyncKeyState(VK_LBUTTON)) {
-                    data->focus_click_pending |= SDL_BUTTON_LMASK;
-                }
-                if (GetAsyncKeyState(VK_RBUTTON)) {
-                    data->focus_click_pending |= SDL_BUTTON_RMASK;
-                }
-                if (GetAsyncKeyState(VK_MBUTTON)) {
-                    data->focus_click_pending |= SDL_BUTTON_MMASK;
-                }
-                if (GetAsyncKeyState(VK_XBUTTON1)) {
-                    data->focus_click_pending |= SDL_BUTTON_X1MASK;
-                }
-                if (GetAsyncKeyState(VK_XBUTTON2)) {
-                    data->focus_click_pending |= SDL_BUTTON_X2MASK;
+                if (LOWORD(wParam) == WA_CLICKACTIVE) {
+                    if (GetAsyncKeyState(VK_LBUTTON)) {
+                        data->focus_click_pending |= SDL_BUTTON_LMASK;
+                    }
+                    if (GetAsyncKeyState(VK_RBUTTON)) {
+                        data->focus_click_pending |= SDL_BUTTON_RMASK;
+                    }
+                    if (GetAsyncKeyState(VK_MBUTTON)) {
+                        data->focus_click_pending |= SDL_BUTTON_MMASK;
+                    }
+                    if (GetAsyncKeyState(VK_XBUTTON1)) {
+                        data->focus_click_pending |= SDL_BUTTON_X1MASK;
+                    }
+                    if (GetAsyncKeyState(VK_XBUTTON2)) {
+                        data->focus_click_pending |= SDL_BUTTON_X2MASK;
+                    }
                 }
                 
                 SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_SHOWN, 0, 0);