diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 54609d03da..95b208c25b 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -94,6 +94,9 @@ #ifndef WM_POINTERLEAVE #define WM_POINTERLEAVE 0x024A #endif +#ifndef WM_POINTERCAPTURECHANGED +#define WM_POINTERCAPTURECHANGED 0x024C +#endif #ifndef WM_UNICHAR #define WM_UNICHAR 0x0109 #endif @@ -1163,6 +1166,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara returnCode = 0; } break; + case WM_POINTERCAPTURECHANGED: case WM_POINTERLEAVE: { const UINT32 pointerid = GET_POINTERID_WPARAM(wParam); @@ -1173,7 +1177,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara } // if this just left the _window_, we don't care. If this is no longer visible to the tablet, time to remove it! - if (!IS_POINTER_INCONTACT_WPARAM(wParam)) { + if ((msg == WM_POINTERCAPTURECHANGED) || !IS_POINTER_INCONTACT_WPARAM(wParam)) { SDL_RemovePenDevice(WIN_GetEventTimestamp(), pen); } returnCode = 0;