Detailed changes
@@ -1073,7 +1073,7 @@ impl AppContext {
pub fn is_action_available(&self, action: &dyn Action) -> bool {
let mut available_in_window = false;
- let action_type = action.as_any().type_id();
+ let action_id = action.id();
if let Some(window_id) = self.platform.main_window_id() {
available_in_window = self
.read_window(window_id, |cx| {
@@ -1083,7 +1083,7 @@ impl AppContext {
cx.views_metadata.get(&(window_id, view_id))
{
if let Some(actions) = cx.actions.get(&view_metadata.type_id) {
- if actions.contains_key(&action_type) {
+ if actions.contains_key(&action_id) {
return true;
}
}
@@ -1094,7 +1094,7 @@ impl AppContext {
})
.unwrap_or(false);
}
- available_in_window || self.global_actions.contains_key(&action_type)
+ available_in_window || self.global_actions.contains_key(&action_id)
}
fn actions_mut(
@@ -3399,7 +3399,7 @@ impl<'a, 'b, 'c, V: View> LayoutContext<'a, 'b, 'c, V> {
for (i, view_id) in self.ancestors(view_id).enumerate() {
if let Some(view_metadata) = self.views_metadata.get(&(window_id, view_id)) {
if let Some(actions) = self.actions.get(&view_metadata.type_id) {
- if actions.contains_key(&action.as_any().type_id()) {
+ if actions.contains_key(&action.id()) {
handler_depth = Some(i);
}
}
@@ -3407,12 +3407,12 @@ impl<'a, 'b, 'c, V: View> LayoutContext<'a, 'b, 'c, V> {
}
}
- if self.global_actions.contains_key(&action.as_any().type_id()) {
+ if self.global_actions.contains_key(&action.id()) {
handler_depth = Some(contexts.len())
}
self.keystroke_matcher
- .bindings_for_action_type(action.as_any().type_id())
+ .bindings_for_action(action.id())
.find_map(|b| {
let highest_handler = handler_depth?;
if action.eq(b.action())
@@ -363,17 +363,13 @@ impl<'a> WindowContext<'a> {
) -> Vec<(&'static str, Box<dyn Action>, SmallVec<[Binding; 1]>)> {
let window_id = self.window_id;
let mut contexts = Vec::new();
- let mut handler_depths_by_action_type = HashMap::<TypeId, usize>::default();
+ let mut handler_depths_by_action_id = HashMap::<TypeId, usize>::default();
for (depth, view_id) in self.ancestors(view_id).enumerate() {
if let Some(view_metadata) = self.views_metadata.get(&(window_id, view_id)) {
contexts.push(view_metadata.keymap_context.clone());
if let Some(actions) = self.actions.get(&view_metadata.type_id) {
- handler_depths_by_action_type.extend(
- actions
- .keys()
- .copied()
- .map(|action_type| (action_type, depth)),
- );
+ handler_depths_by_action_id
+ .extend(actions.keys().copied().map(|action_id| (action_id, depth)));
}
} else {
log::error!(
@@ -383,21 +379,21 @@ impl<'a> WindowContext<'a> {
}
}
- handler_depths_by_action_type.extend(
+ handler_depths_by_action_id.extend(
self.global_actions
.keys()
.copied()
- .map(|action_type| (action_type, contexts.len())),
+ .map(|action_id| (action_id, contexts.len())),
);
self.action_deserializers
.iter()
- .filter_map(move |(name, (type_id, deserialize))| {
- if let Some(action_depth) = handler_depths_by_action_type.get(type_id).copied() {
+ .filter_map(move |(name, (action_id, deserialize))| {
+ if let Some(action_depth) = handler_depths_by_action_id.get(action_id).copied() {
let action = deserialize(serde_json::Value::Object(Default::default())).ok()?;
let bindings = self
.keystroke_matcher
- .bindings_for_action_type(*type_id)
+ .bindings_for_action(*action_id)
.filter(|b| {
action.eq(b.action())
&& (0..=action_depth)
@@ -47,8 +47,8 @@ impl KeymapMatcher {
self.keymap.clear();
}
- pub fn bindings_for_action_type(&self, action_type: TypeId) -> impl Iterator<Item = &Binding> {
- self.keymap.bindings_for_action_type(action_type)
+ pub fn bindings_for_action(&self, action_id: TypeId) -> impl Iterator<Item = &Binding> {
+ self.keymap.bindings_for_action(action_id)
}
pub fn clear_pending(&mut self) {
@@ -1,39 +1,36 @@
use smallvec::SmallVec;
-use std::{
- any::{Any, TypeId},
- collections::HashMap,
-};
+use std::{any::TypeId, collections::HashMap};
use super::Binding;
#[derive(Default)]
pub struct Keymap {
bindings: Vec<Binding>,
- binding_indices_by_action_type: HashMap<TypeId, SmallVec<[usize; 3]>>,
+ binding_indices_by_action_id: HashMap<TypeId, SmallVec<[usize; 3]>>,
}
impl Keymap {
pub fn new(bindings: Vec<Binding>) -> Self {
- let mut binding_indices_by_action_type = HashMap::new();
+ let mut binding_indices_by_action_id = HashMap::new();
for (ix, binding) in bindings.iter().enumerate() {
- binding_indices_by_action_type
- .entry(binding.action().type_id())
+ binding_indices_by_action_id
+ .entry(binding.action().id())
.or_insert_with(SmallVec::new)
.push(ix);
}
Self {
- binding_indices_by_action_type,
+ binding_indices_by_action_id,
bindings,
}
}
- pub(crate) fn bindings_for_action_type(
+ pub(crate) fn bindings_for_action(
&self,
- action_type: TypeId,
+ action_id: TypeId,
) -> impl Iterator<Item = &'_ Binding> {
- self.binding_indices_by_action_type
- .get(&action_type)
+ self.binding_indices_by_action_id
+ .get(&action_id)
.map(SmallVec::as_slice)
.unwrap_or(&[])
.iter()
@@ -42,8 +39,8 @@ impl Keymap {
pub(crate) fn add_bindings<T: IntoIterator<Item = Binding>>(&mut self, bindings: T) {
for binding in bindings {
- self.binding_indices_by_action_type
- .entry(binding.action().as_any().type_id())
+ self.binding_indices_by_action_id
+ .entry(binding.action().id())
.or_default()
.push(self.bindings.len());
self.bindings.push(binding);
@@ -52,7 +49,7 @@ impl Keymap {
pub(crate) fn clear(&mut self) {
self.bindings.clear();
- self.binding_indices_by_action_type.clear();
+ self.binding_indices_by_action_id.clear();
}
pub fn bindings(&self) -> &Vec<Binding> {
@@ -231,7 +231,7 @@ impl MacForegroundPlatform {
} => {
// TODO
let keystrokes = keystroke_matcher
- .bindings_for_action_type(action.as_any().type_id())
+ .bindings_for_action(action.id())
.find(|binding| binding.action().eq(action.as_ref()))
.map(|binding| binding.keystrokes());
let selector = match os_action {