diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index f887bf706c..518cefcd60 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -75,11 +75,11 @@ unsafe fn build_classes() { ); decl.add_method( sel!(windowDidBecomeKey:), - window_did_become_key as extern "C" fn(&Object, Sel, id), + window_did_change_key_status as extern "C" fn(&Object, Sel, id), ); decl.add_method( sel!(windowDidResignKey:), - window_did_resign_key as extern "C" fn(&Object, Sel, id), + window_did_change_key_status as extern "C" fn(&Object, Sel, id), ); decl.add_method(sel!(close), close_window as extern "C" fn(&Object, Sel)); decl.register() @@ -612,42 +612,25 @@ extern "C" fn window_did_resize(this: &Object, _: Sel, _: id) { window_state.as_ref().borrow().move_traffic_light(); } -extern "C" fn window_did_become_key(this: &Object, _: Sel, _: id) { - let window_state = unsafe { get_window_state(this) }; - window_state - .as_ref() - .borrow() - .executor - .spawn({ - let window_state = window_state.clone(); - async move { - let mut window_state_borrow = window_state.as_ref().borrow_mut(); - if let Some(mut callback) = window_state_borrow.activate_callback.take() { - drop(window_state_borrow); - callback(true); - window_state.borrow_mut().activate_callback = Some(callback); - }; - } - }) - .detach(); -} +extern "C" fn window_did_change_key_status(this: &Object, selector: Sel, _: id) { + let is_active = if selector == sel!(windowDidBecomeKey:) { + true + } else if selector == sel!(windowDidResignKey:) { + false + } else { + unreachable!(); + }; -extern "C" fn window_did_resign_key(this: &Object, _: Sel, _: id) { let window_state = unsafe { get_window_state(this) }; - window_state - .as_ref() - .borrow() - .executor - .spawn({ - let window_state = window_state.clone(); - async move { - let mut window_state_borrow = window_state.as_ref().borrow_mut(); - if let Some(mut callback) = window_state_borrow.activate_callback.take() { - drop(window_state_borrow); - callback(false); - window_state.borrow_mut().activate_callback = Some(callback); - }; - } + let executor = window_state.as_ref().borrow().executor.clone(); + executor + .spawn(async move { + let mut window_state_borrow = window_state.as_ref().borrow_mut(); + if let Some(mut callback) = window_state_borrow.activate_callback.take() { + drop(window_state_borrow); + callback(is_active); + window_state.borrow_mut().activate_callback = Some(callback); + }; }) .detach(); }