Ensure there's always at least one selection in the editor

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Antonio Scandurra 2022-02-11 16:25:26 +01:00
parent a41725daee
commit b1a44b5816

View file

@ -1224,6 +1224,7 @@ impl Editor {
goal: SelectionGoal::None, goal: SelectionGoal::None,
}; };
self.pending_selection = Some(PendingSelection { selection, mode });
if !add { if !add {
self.update_selections::<usize>(Vec::new(), None, cx); self.update_selections::<usize>(Vec::new(), None, cx);
} else if click_count > 1 { } else if click_count > 1 {
@ -1233,8 +1234,6 @@ impl Editor {
self.update_selections::<usize>(selections, None, cx) self.update_selections::<usize>(selections, None, cx)
} }
self.pending_selection = Some(PendingSelection { selection, mode });
cx.notify(); cx.notify();
} }
@ -4359,19 +4358,16 @@ impl Editor {
.display_map .display_map
.update(cx, |display_map, cx| display_map.snapshot(cx)); .update(cx, |display_map, cx| display_map.snapshot(cx));
let buffer = &display_map.buffer_snapshot; let buffer = &display_map.buffer_snapshot;
self.pending_selection = None; if !self.selections.is_empty() {
self.pending_selection = None;
}
self.add_selections_state = None; self.add_selections_state = None;
self.select_next_state = None; self.select_next_state = None;
self.select_larger_syntax_node_stack.clear(); self.select_larger_syntax_node_stack.clear();
self.autoclose_stack.invalidate(&self.selections, &buffer); self.autoclose_stack.invalidate(&self.selections, &buffer);
self.snippet_stack.invalidate(&self.selections, &buffer); self.snippet_stack.invalidate(&self.selections, &buffer);
let new_cursor_position = self let new_cursor_position = self.newest_anchor_selection().head();
.selections
.iter()
.max_by_key(|s| s.id)
.map(|s| s.head())
.unwrap();
self.push_to_nav_history( self.push_to_nav_history(
old_cursor_position.clone(), old_cursor_position.clone(),