diff --git a/Sources/Plasma/Apps/plClient/winmain.cpp b/Sources/Plasma/Apps/plClient/winmain.cpp index ba7849e5..56f600c1 100644 --- a/Sources/Plasma/Apps/plClient/winmain.cpp +++ b/Sources/Plasma/Apps/plClient/winmain.cpp @@ -395,32 +395,38 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) nc->ResetServerTimeOffset(true); break; - case WM_KEYDOWN : - case WM_LBUTTONDOWN : - case WM_RBUTTONDOWN : - case WM_LBUTTONDBLCLK : // The left mouse button was double-clicked. - case WM_MBUTTONDBLCLK : // The middle mouse button was double-clicked. - case WM_MBUTTONDOWN : // The middle mouse button was pressed. - case WM_RBUTTONDBLCLK : // The right mouse button was double-clicked. - // If they did anything but move the mouse, quit any intro movie playing. - { - if( gClient ) - gClient->SetQuitIntro(true); - } - // Fall through to other events + case WM_LBUTTONDOWN: + case WM_RBUTTONDOWN: + case WM_LBUTTONDBLCLK: + case WM_MBUTTONDBLCLK: + case WM_MBUTTONDOWN: + case WM_RBUTTONDBLCLK: + // Ensure we don't leave the client area during this action + SetCapture(hWnd); + // fall through to old case + case WM_KEYDOWN: case WM_CHAR: - case WM_KEYUP : - case WM_LBUTTONUP : - case WM_RBUTTONUP : - case WM_MBUTTONUP : // The middle mouse button was released. - case 0x020A: // fuc&ing windows b.s... + // If they did anything but move the mouse, quit any intro movie playing. + if (gClient) { - if (gClient && gClient->WindowActive() && gClient->GetInputManager()) - { + gClient->SetQuitIntro(true); + + // normal input processing + if (gClient->WindowActive() && gClient->GetInputManager()) gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); - } } break; + case WM_LBUTTONUP: + case WM_RBUTTONUP: + case WM_MBUTTONUP: + // Stop hogging the cursor + ReleaseCapture(); + // fall through to input processing + case WM_MOUSEWHEEL: + case WM_KEYUP: + if (gClient && gClient->WindowActive() && gClient->GetInputManager()) + gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); + break; case WM_MOUSEMOVE: {