From efb463cea048b927302c239a426c6ebb60c82741 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz <6529475+prokopyl@users.noreply.github.com> Date: Sun, 4 Oct 2026 17:41:18 +0200 Subject: [PATCH] Properly handle WM_CAPTURECHANGED message --- src/platform/win/window.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/platform/win/window.rs b/src/platform/win/window.rs index 48861282..66f7c95b 100644 --- a/src/platform/win/window.rs +++ b/src/platform/win/window.rs @@ -575,6 +575,22 @@ unsafe fn wnd_proc_inner( None } + WM_CAPTURECHANGED => { + let window_gaining_capture = + NonNull::new(lparam as _).map(|p| unsafe { HWnd::from_raw(p) }); + + if window_gaining_capture != Some(window) { + let previous_counter = window_state.mouse_button_counter.replace(0); + HWnd::release_capture(); + + if previous_counter == 0 { + window_bv.handle_event(Event::Mouse(MouseEvent::CursorLeft)); + window_state.mouse_was_outside_window.set(true); + } + } + + Some(0) + } WM_TIMER => { if wparam == WIN_FRAME_TIMER.get() { window_bv.handle_on_frame()