windows: Catch WM_POINTERCAPTURECHANGED events.

Fixes #11844.
This commit is contained in:
Ryan C. Gordon
2025-01-07 10:22:15 -05:00
parent 8ec576ddab
commit 0180ca541e

View File

@@ -94,6 +94,9 @@
#ifndef WM_POINTERLEAVE #ifndef WM_POINTERLEAVE
#define WM_POINTERLEAVE 0x024A #define WM_POINTERLEAVE 0x024A
#endif #endif
#ifndef WM_POINTERCAPTURECHANGED
#define WM_POINTERCAPTURECHANGED 0x024C
#endif
#ifndef WM_UNICHAR #ifndef WM_UNICHAR
#define WM_UNICHAR 0x0109 #define WM_UNICHAR 0x0109
#endif #endif
@@ -1163,6 +1166,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
returnCode = 0; returnCode = 0;
} break; } break;
case WM_POINTERCAPTURECHANGED:
case WM_POINTERLEAVE: case WM_POINTERLEAVE:
{ {
const UINT32 pointerid = GET_POINTERID_WPARAM(wParam); 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 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); SDL_RemovePenDevice(WIN_GetEventTimestamp(), pen);
} }
returnCode = 0; returnCode = 0;