From 22dd68fbfb3e5757119245ae2294df881ecbbe1d Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 6 Jun 2022 09:18:58 +0200 Subject: [PATCH] Add keystroke for menu item only when action is equal to binding This fixes a bug where we would show `cmd-e` instead of `cmd-f` for `Edit -> Find` because both bindings would have the `buffer_search::Deploy` action and we were mistakenly selecting the former. --- crates/gpui/src/keymap.rs | 6 +++++- crates/gpui/src/platform/mac/platform.rs | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) 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()