diff --git a/crates/gpui/src/keymap.rs b/crates/gpui/src/keymap.rs index 87b0287dc48fce0b55d48346ef462297f9150bc6..786adad704a1a72f7266c59c5a4021ea45ae3a9e 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 7ace58f4282365707bb84f840a24f9f2d912acd8..2be0cdc454321a7d2b0a2eb2907e27090179a0c5 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()