Add keystroke for menu item only when action is equal to binding
Antonio Scandurra
created 3 years ago
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.
Change summary
crates/gpui/src/keymap.rs | 6 +++++-
crates/gpui/src/platform/mac/platform.rs | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
Detailed changes
@@ -176,7 +176,7 @@ impl Matcher {
cx: &Context,
) -> Option<SmallVec<[Keystroke; 2]>> {
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 {
@@ -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()