From d8624ed4d8b85e5212cbdf64c14a55781cf2af00 Mon Sep 17 00:00:00 2001 From: Adam Nemecek Date: Fri, 5 Apr 2024 10:51:15 -0700 Subject: [PATCH] fixing bug in CGEventTap where if the callback returned None, the event would not get cancelled --- core-graphics/src/event.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core-graphics/src/event.rs b/core-graphics/src/event.rs index 73055766..36569a0a 100644 --- a/core-graphics/src/event.rs +++ b/core-graphics/src/event.rs @@ -432,11 +432,13 @@ unsafe extern "C" fn cg_event_tap_callback_internal( let callback = _user_info as *mut CGEventTapCallBackFn; let event = CGEvent::from_ptr(_event); let new_event = (*callback)(_proxy, _etype, &event); - let event = match new_event { - Some(new_event) => new_event, - None => event, - }; - ManuallyDrop::new(event).as_ptr() + match new_event { + Some(new_event) => ManuallyDrop::new(new_event).as_ptr(), + None => { + std::mem::forget(event); + std::ptr::null_mut() as crate::sys::CGEventRef + } + } } /// ```no_run