in native/desktop-win32/src/win32/event_loop.rs [476:496]
fn on_pointerup(event_loop: &EventLoop, window: &Window, msg: u32, wparam: WPARAM) -> Option<LRESULT> {
let is_non_client = matches!(msg, WM_NCPOINTERUP);
let pointer_info = PointerInfo::try_from_message(wparam).ok()?;
let pointer_button = match pointer_info.get_pointer_button_change() {
change if change.kind() == PointerButtonChangeKind::Released => change.button(),
pointer_button_change => {
log::error!("Unexpected pointer button change on pointer up: {pointer_button_change:?}");
return None;
}
};
let event = PointerUpEvent {
button: pointer_button,
location_in_window: pointer_info.get_location_in_window(),
non_client_area: is_non_client,
state: pointer_info.get_pointer_state(),
timestamp: pointer_info.get_timestamp(),
};
let result = event_loop.handle_event(window, Event::PointerUp(event));
// WM_NCPOINTERUP should always return None so that the window buttons work
if is_non_client { None } else { result }
}