diff --git a/crates/gpui/src/keymap.rs b/crates/gpui/src/keymap.rs index 87b0287dc4..786adad704 100644 --- a/crates/gpui/src/keymap.rs +++ b/crates/gpui/src/keymap.rs @@ -176,7 +176,7 @@ impl Matcher { cx: &Context, ) -> Option> { for binding in self.keymap.bindings.iter().rev() { - if binding.action.id() == action.id() + if binding.action.eq(action) && binding .context_predicate .as_ref() @@ -265,6 +265,10 @@ impl Binding { pub fn keystrokes(&self) -> &[Keystroke] { &self.keystrokes } + + pub fn action(&self) -> &dyn Action { + self.action.as_ref() + } } impl Keystroke { diff --git a/crates/gpui/src/platform/mac/platform.rs b/crates/gpui/src/platform/mac/platform.rs index 7ace58f428..2be0cdc454 100644 --- a/crates/gpui/src/platform/mac/platform.rs +++ b/crates/gpui/src/platform/mac/platform.rs @@ -154,7 +154,7 @@ impl MacForegroundPlatform { let mut keystroke = None; if let Some(binding) = keystroke_matcher .bindings_for_action_type(action.as_any().type_id()) - .next() + .find(|binding| binding.action().eq(action.as_ref())) { if binding.keystrokes().len() == 1 { keystroke = binding.keystrokes().first()