diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index e5b0f71ff3d595f7cfa040ea336d280f831f2dee..12338b75fbe0b8d08f512ae199bc810eedac838c 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -1774,11 +1774,13 @@ impl MutableAppContext { presenter.borrow().dispatch_path(cx.as_ref()), keystroke, ) { - return; + return true; } } - presenter.borrow_mut().dispatch_event(event, cx); + presenter.borrow_mut().dispatch_event(event, cx) + } else { + false } }) })); diff --git a/crates/gpui/src/platform.rs b/crates/gpui/src/platform.rs index 10de12fbe1d3104b8140d18643f40a44ee100148..6d841f3962694317aec11d9b21f24faab4ab83ae 100644 --- a/crates/gpui/src/platform.rs +++ b/crates/gpui/src/platform.rs @@ -90,7 +90,7 @@ pub trait Dispatcher: Send + Sync { pub trait Window: WindowContext { fn as_any_mut(&mut self) -> &mut dyn Any; - fn on_event(&mut self, callback: Box); + fn on_event(&mut self, callback: Box bool>); fn on_active_status_change(&mut self, callback: Box); fn on_resize(&mut self, callback: Box); fn on_close(&mut self, callback: Box); diff --git a/crates/gpui/src/platform/mac/window.rs b/crates/gpui/src/platform/mac/window.rs index 5d6848cd7bd1311af8f44d8ef804ae3162b736aa..8ce2e9b363214b348b293324bd9fd17b646e0a6c 100644 --- a/crates/gpui/src/platform/mac/window.rs +++ b/crates/gpui/src/platform/mac/window.rs @@ -164,7 +164,7 @@ pub struct Window(Rc>); struct WindowState { id: usize, native_window: id, - event_callback: Option>, + event_callback: Option bool>>, activate_callback: Option>, resize_callback: Option>, close_callback: Option>, @@ -331,7 +331,7 @@ impl platform::Window for Window { self } - fn on_event(&mut self, callback: Box) { + fn on_event(&mut self, callback: Box bool>) { self.0.as_ref().borrow_mut().event_callback = Some(callback); } diff --git a/crates/gpui/src/platform/test.rs b/crates/gpui/src/platform/test.rs index e22db89e3b92ac0eabb1e3677846a4245ae53312..b1b460ff70d96c894ba74583f52cf60efebbcd1c 100644 --- a/crates/gpui/src/platform/test.rs +++ b/crates/gpui/src/platform/test.rs @@ -34,7 +34,7 @@ pub struct Window { size: Vector2F, scale_factor: f32, current_scene: Option, - event_handlers: Vec>, + event_handlers: Vec bool>>, resize_handlers: Vec>, close_handlers: Vec>, pub(crate) title: Option, @@ -233,7 +233,7 @@ impl super::Window for Window { self } - fn on_event(&mut self, callback: Box) { + fn on_event(&mut self, callback: Box bool>) { self.event_handlers.push(callback); } diff --git a/crates/gpui/src/presenter.rs b/crates/gpui/src/presenter.rs index eb7f3514443a0cffcb661ab3d2815e15531a0648..4b0050e943b029b6a5f05947180edcbf500eed86 100644 --- a/crates/gpui/src/presenter.rs +++ b/crates/gpui/src/presenter.rs @@ -224,7 +224,7 @@ impl Presenter { } } - pub fn dispatch_event(&mut self, event: Event, cx: &mut MutableAppContext) { + pub fn dispatch_event(&mut self, event: Event, cx: &mut MutableAppContext) -> bool { if let Some(root_view_id) = cx.root_view_id(self.window_id) { let mut invalidated_views = Vec::new(); let mut mouse_down_out_handlers = Vec::new(); @@ -366,7 +366,7 @@ impl Presenter { } if !handled { - event_cx.dispatch_event(root_view_id, &event); + handled = event_cx.dispatch_event(root_view_id, &event); } invalidated_views.extend(event_cx.invalidated_views); @@ -384,6 +384,10 @@ impl Presenter { } cx.dispatch_action_any(self.window_id, &dispatch_path, directive.action.as_ref()); } + + handled + } else { + false } }