diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 37c8c7983d9155794f107a7291399eca3142c753..5763d97c47227fd2a75d3009a9e4d7d0d7a12a3a 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1047,6 +1047,11 @@ impl Editor { let buffer = self.buffer.read(cx).snapshot(cx); let mut oldest_selection = self.oldest_selection::(&buffer); if self.selection_count() == 1 { + if oldest_selection.is_empty() { + cx.propagate_action(); + return; + } + oldest_selection.start = oldest_selection.head().clone(); oldest_selection.end = oldest_selection.head().clone(); } diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index dd9e09f663fb21cf562e8b60469a0a5b72fec207..181204e942d5fb8dce22b9c9e8d9e54e12777251 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -1164,8 +1164,7 @@ impl MutableAppContext { let mut context = keymap::Context::default(); for view_id in &responder_chain { if let Some(view) = self.cx.views.get(&(window_id, *view_id)) { - context.extend(view.keymap_context(self.as_ref())); - context_chain.push(context.clone()); + context_chain.push(view.keymap_context(self.as_ref())); } else { return Err(anyhow!( "View {} in responder chain does not exist", @@ -4094,7 +4093,10 @@ mod tests { let mut view_2 = View::new(2); let mut view_3 = View::new(3); view_1.keymap_context.set.insert("a".into()); + view_2.keymap_context.set.insert("a".into()); view_2.keymap_context.set.insert("b".into()); + view_3.keymap_context.set.insert("a".into()); + view_3.keymap_context.set.insert("b".into()); view_3.keymap_context.set.insert("c".into()); let (window_id, view_1) = cx.add_window(Default::default(), |_| view_1);