editor: Ensure mouse cursor is shown again on mouse move (#32795)

Closes #32787
Follow-up to #27519 and #32408 

This PR fixes an issue where the mouse cursor would stay hidden after
typing in the editor.

Before #32408, we would rerender the editor on every mouse move. Now, we
(correctly) only do this if a rerender is actually required. This caused
a small regression for hiding the mouse cursor though: Due to the view
now being cached, we do not neccessarily update the mouse cursor style
so it is shown again. The boolean is updated but the view is not,
resulting in the cursor style being kept until another action is
performed. This is an issue with both Stable and Preview (due to some
other changes, the issue is slightly worse on Preview though, see
https://github.com/zed-industries/zed/pull/32596#issuecomment-2969258800
and
https://github.com/zed-industries/zed/pull/32596#issuecomment-2969357248
for some more context).

This PR ensures that the cursor is shown again by scheduling a redraw of
the editor whenever the boolean is updated.

The change should not cause any performance regressions: In most cases
where we want to hide the mouse, the editor is about to be rerendered
anyway, hence this would not change anything. For cases where we want to
show the cursor again, this ensures that we actually end up doing so by
rerendering the editor once.

Release Notes:

- Fixed an issue where the mouse cursor would sometimes stay hidden
after typing in editors with the `hide_mouse` setting enabled.
This commit is contained in:
Finn Evers 2025-06-16 16:19:08 +02:00 committed by GitHub
parent d29e94b11c
commit b749d9302f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 121 additions and 114 deletions

View file

@ -2059,7 +2059,7 @@ impl Editor {
} }
}); });
if active { if active {
editor.show_mouse_cursor(); editor.show_mouse_cursor(cx);
} }
}), }),
], ],
@ -2312,12 +2312,15 @@ impl Editor {
key_context key_context
} }
fn show_mouse_cursor(&mut self) { fn show_mouse_cursor(&mut self, cx: &mut Context<Self>) {
self.mouse_cursor_hidden = false; if self.mouse_cursor_hidden {
self.mouse_cursor_hidden = false;
cx.notify();
}
} }
pub fn hide_mouse_cursor(&mut self, origin: &HideMouseCursorOrigin) { pub fn hide_mouse_cursor(&mut self, origin: HideMouseCursorOrigin, cx: &mut Context<Self>) {
self.mouse_cursor_hidden = match origin { let hide_mouse_cursor = match origin {
HideMouseCursorOrigin::TypingAction => { HideMouseCursorOrigin::TypingAction => {
matches!( matches!(
self.hide_mouse_mode, self.hide_mouse_mode,
@ -2328,6 +2331,10 @@ impl Editor {
matches!(self.hide_mouse_mode, HideMouseMode::OnTypingAndMovement) matches!(self.hide_mouse_mode, HideMouseMode::OnTypingAndMovement)
} }
}; };
if self.mouse_cursor_hidden != hide_mouse_cursor {
self.mouse_cursor_hidden = hide_mouse_cursor;
cx.notify();
}
} }
pub fn edit_prediction_in_conflict(&self) -> bool { pub fn edit_prediction_in_conflict(&self) -> bool {
@ -3768,7 +3775,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let selections = self.selections.all_adjusted(cx); let selections = self.selections.all_adjusted(cx);
let mut bracket_inserted = false; let mut bracket_inserted = false;
@ -4191,7 +4198,7 @@ impl Editor {
} }
pub fn newline(&mut self, _: &Newline, window: &mut Window, cx: &mut Context<Self>) { pub fn newline(&mut self, _: &Newline, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
let (edits_with_flags, selection_info): (Vec<_>, Vec<_>) = { let (edits_with_flags, selection_info): (Vec<_>, Vec<_>) = {
let selections = this.selections.all::<usize>(cx); let selections = this.selections.all::<usize>(cx);
@ -4463,7 +4470,7 @@ impl Editor {
} }
pub fn newline_above(&mut self, _: &NewlineAbove, window: &mut Window, cx: &mut Context<Self>) { pub fn newline_above(&mut self, _: &NewlineAbove, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let buffer = self.buffer.read(cx); let buffer = self.buffer.read(cx);
let snapshot = buffer.snapshot(cx); let snapshot = buffer.snapshot(cx);
@ -4522,7 +4529,7 @@ impl Editor {
} }
pub fn newline_below(&mut self, _: &NewlineBelow, window: &mut Window, cx: &mut Context<Self>) { pub fn newline_below(&mut self, _: &NewlineBelow, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let buffer = self.buffer.read(cx); let buffer = self.buffer.read(cx);
let snapshot = buffer.snapshot(cx); let snapshot = buffer.snapshot(cx);
@ -5537,7 +5544,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.do_completion(action.item_ix, CompletionIntent::Complete, window, cx) self.do_completion(action.item_ix, CompletionIntent::Complete, window, cx)
} }
@ -5547,7 +5554,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.do_completion(None, CompletionIntent::CompleteWithInsert, window, cx) self.do_completion(None, CompletionIntent::CompleteWithInsert, window, cx)
} }
@ -5557,7 +5564,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.do_completion(None, CompletionIntent::CompleteWithReplace, window, cx) self.do_completion(None, CompletionIntent::CompleteWithReplace, window, cx)
} }
@ -5567,7 +5574,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.do_completion(action.item_ix, CompletionIntent::Compose, window, cx) self.do_completion(action.item_ix, CompletionIntent::Compose, window, cx)
} }
@ -5996,7 +6003,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let actions_menu = let actions_menu =
if let CodeContextMenu::CodeActions(menu) = self.hide_context_menu(window, cx)? { if let CodeContextMenu::CodeActions(menu) = self.hide_context_menu(window, cx)? {
@ -9362,7 +9369,7 @@ impl Editor {
} }
pub fn backspace(&mut self, _: &Backspace, window: &mut Window, cx: &mut Context<Self>) { pub fn backspace(&mut self, _: &Backspace, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.select_autoclose_pair(window, cx); this.select_autoclose_pair(window, cx);
let mut linked_ranges = HashMap::<_, Vec<_>>::default(); let mut linked_ranges = HashMap::<_, Vec<_>>::default();
@ -9457,7 +9464,7 @@ impl Editor {
} }
pub fn delete(&mut self, _: &Delete, window: &mut Window, cx: &mut Context<Self>) { pub fn delete(&mut self, _: &Delete, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
@ -9475,7 +9482,7 @@ impl Editor {
} }
pub fn backtab(&mut self, _: &Backtab, window: &mut Window, cx: &mut Context<Self>) { pub fn backtab(&mut self, _: &Backtab, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
if self.move_to_prev_snippet_tabstop(window, cx) { if self.move_to_prev_snippet_tabstop(window, cx) {
return; return;
} }
@ -9484,13 +9491,13 @@ impl Editor {
pub fn tab(&mut self, _: &Tab, window: &mut Window, cx: &mut Context<Self>) { pub fn tab(&mut self, _: &Tab, window: &mut Window, cx: &mut Context<Self>) {
if self.move_to_next_snippet_tabstop(window, cx) { if self.move_to_next_snippet_tabstop(window, cx) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
return; return;
} }
if self.read_only(cx) { if self.read_only(cx) {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let mut selections = self.selections.all_adjusted(cx); let mut selections = self.selections.all_adjusted(cx);
let buffer = self.buffer.read(cx); let buffer = self.buffer.read(cx);
let snapshot = buffer.snapshot(cx); let snapshot = buffer.snapshot(cx);
@ -9603,7 +9610,7 @@ impl Editor {
if self.read_only(cx) { if self.read_only(cx) {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let mut selections = self.selections.all::<Point>(cx); let mut selections = self.selections.all::<Point>(cx);
let mut prev_edited_row = 0; let mut prev_edited_row = 0;
let mut row_delta = 0; let mut row_delta = 0;
@ -9708,7 +9715,7 @@ impl Editor {
if self.read_only(cx) { if self.read_only(cx) {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let selections = self.selections.all::<Point>(cx); let selections = self.selections.all::<Point>(cx);
let mut deletion_ranges = Vec::new(); let mut deletion_ranges = Vec::new();
@ -9782,7 +9789,7 @@ impl Editor {
if self.read_only(cx) { if self.read_only(cx) {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let selections = self let selections = self
.selections .selections
.all::<usize>(cx) .all::<usize>(cx)
@ -9801,7 +9808,7 @@ impl Editor {
} }
pub fn delete_line(&mut self, _: &DeleteLine, window: &mut Window, cx: &mut Context<Self>) { pub fn delete_line(&mut self, _: &DeleteLine, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let selections = self.selections.all::<Point>(cx); let selections = self.selections.all::<Point>(cx);
@ -9950,7 +9957,7 @@ impl Editor {
} }
pub fn join_lines(&mut self, _: &JoinLines, window: &mut Window, cx: &mut Context<Self>) { pub fn join_lines(&mut self, _: &JoinLines, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.join_lines_impl(true, window, cx); self.join_lines_impl(true, window, cx);
} }
@ -10012,7 +10019,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let mut buffer_ids = HashSet::default(); let mut buffer_ids = HashSet::default();
let snapshot = self.buffer().read(cx).snapshot(cx); let snapshot = self.buffer().read(cx).snapshot(cx);
for selection in self.selections.all::<usize>(cx) { for selection in self.selections.all::<usize>(cx) {
@ -10029,7 +10036,7 @@ impl Editor {
} }
pub fn git_restore(&mut self, _: &Restore, window: &mut Window, cx: &mut Context<Self>) { pub fn git_restore(&mut self, _: &Restore, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let selections = self let selections = self
.selections .selections
.all(cx) .all(cx)
@ -10453,7 +10460,7 @@ impl Editor {
) where ) where
Fn: FnMut(&mut Vec<&str>), Fn: FnMut(&mut Vec<&str>),
{ {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let buffer = self.buffer.read(cx).snapshot(cx); let buffer = self.buffer.read(cx).snapshot(cx);
@ -10778,7 +10785,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let buffer = &display_map.buffer_snapshot; let buffer = &display_map.buffer_snapshot;
@ -10864,7 +10871,7 @@ impl Editor {
} }
pub fn move_line_up(&mut self, _: &MoveLineUp, window: &mut Window, cx: &mut Context<Self>) { pub fn move_line_up(&mut self, _: &MoveLineUp, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let buffer = self.buffer.read(cx).snapshot(cx); let buffer = self.buffer.read(cx).snapshot(cx);
@ -10971,7 +10978,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let buffer = self.buffer.read(cx).snapshot(cx); let buffer = self.buffer.read(cx).snapshot(cx);
@ -11063,7 +11070,7 @@ impl Editor {
} }
pub fn transpose(&mut self, _: &Transpose, window: &mut Window, cx: &mut Context<Self>) { pub fn transpose(&mut self, _: &Transpose, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
let edits = this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { let edits = this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
@ -11121,7 +11128,7 @@ impl Editor {
} }
pub fn rewrap(&mut self, _: &Rewrap, _: &mut Window, cx: &mut Context<Self>) { pub fn rewrap(&mut self, _: &Rewrap, _: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.rewrap_impl(RewrapOptions::default(), cx) self.rewrap_impl(RewrapOptions::default(), cx)
} }
@ -11374,13 +11381,13 @@ impl Editor {
} }
pub fn cut(&mut self, _: &Cut, window: &mut Window, cx: &mut Context<Self>) { pub fn cut(&mut self, _: &Cut, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let item = self.cut_common(window, cx); let item = self.cut_common(window, cx);
cx.write_to_clipboard(item); cx.write_to_clipboard(item);
} }
pub fn kill_ring_cut(&mut self, _: &KillRingCut, window: &mut Window, cx: &mut Context<Self>) { pub fn kill_ring_cut(&mut self, _: &KillRingCut, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.change_selections(None, window, cx, |s| { self.change_selections(None, window, cx, |s| {
s.move_with(|snapshot, sel| { s.move_with(|snapshot, sel| {
if sel.is_empty() { if sel.is_empty() {
@ -11398,7 +11405,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let (text, metadata) = if let Some(KillRing(item)) = cx.try_global() { let (text, metadata) = if let Some(KillRing(item)) = cx.try_global() {
if let Some(ClipboardEntry::String(kill_ring)) = item.entries().first() { if let Some(ClipboardEntry::String(kill_ring)) = item.entries().first() {
(kill_ring.text().to_string(), kill_ring.metadata_json()) (kill_ring.text().to_string(), kill_ring.metadata_json())
@ -11595,7 +11602,7 @@ impl Editor {
} }
pub fn paste(&mut self, _: &Paste, window: &mut Window, cx: &mut Context<Self>) { pub fn paste(&mut self, _: &Paste, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
if let Some(item) = cx.read_from_clipboard() { if let Some(item) = cx.read_from_clipboard() {
let entries = item.entries(); let entries = item.entries();
@ -11620,7 +11627,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
if let Some(transaction_id) = self.buffer.update(cx, |buffer, cx| buffer.undo(cx)) { if let Some(transaction_id) = self.buffer.update(cx, |buffer, cx| buffer.undo(cx)) {
if let Some((selections, _)) = if let Some((selections, _)) =
@ -11650,7 +11657,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
if let Some(transaction_id) = self.buffer.update(cx, |buffer, cx| buffer.redo(cx)) { if let Some(transaction_id) = self.buffer.update(cx, |buffer, cx| buffer.redo(cx)) {
if let Some((_, Some(selections))) = if let Some((_, Some(selections))) =
@ -11685,7 +11692,7 @@ impl Editor {
} }
pub fn move_left(&mut self, _: &MoveLeft, window: &mut Window, cx: &mut Context<Self>) { pub fn move_left(&mut self, _: &MoveLeft, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
let cursor = if selection.is_empty() { let cursor = if selection.is_empty() {
@ -11699,14 +11706,14 @@ impl Editor {
} }
pub fn select_left(&mut self, _: &SelectLeft, window: &mut Window, cx: &mut Context<Self>) { pub fn select_left(&mut self, _: &SelectLeft, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| (movement::left(map, head), SelectionGoal::None)); s.move_heads_with(|map, head, _| (movement::left(map, head), SelectionGoal::None));
}) })
} }
pub fn move_right(&mut self, _: &MoveRight, window: &mut Window, cx: &mut Context<Self>) { pub fn move_right(&mut self, _: &MoveRight, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
let cursor = if selection.is_empty() { let cursor = if selection.is_empty() {
@ -11720,7 +11727,7 @@ impl Editor {
} }
pub fn select_right(&mut self, _: &SelectRight, window: &mut Window, cx: &mut Context<Self>) { pub fn select_right(&mut self, _: &SelectRight, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| (movement::right(map, head), SelectionGoal::None)); s.move_heads_with(|map, head, _| (movement::right(map, head), SelectionGoal::None));
}) })
@ -11736,7 +11743,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
let selection_count = self.selections.count(); let selection_count = self.selections.count();
@ -11779,7 +11786,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
@ -11816,7 +11823,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
@ -11844,7 +11851,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| { s.move_heads_with(|map, head, goal| {
@ -11859,7 +11866,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| { s.move_heads_with(|map, head, goal| {
@ -11878,7 +11885,7 @@ impl Editor {
return; return;
}; };
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
@ -11918,7 +11925,7 @@ impl Editor {
return; return;
}; };
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let autoscroll = if action.center_cursor { let autoscroll = if action.center_cursor {
Autoscroll::center() Autoscroll::center()
@ -11947,7 +11954,7 @@ impl Editor {
} }
pub fn select_up(&mut self, _: &SelectUp, window: &mut Window, cx: &mut Context<Self>) { pub fn select_up(&mut self, _: &SelectUp, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| { s.move_heads_with(|map, head, goal| {
@ -11964,7 +11971,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
let selection_count = self.selections.count(); let selection_count = self.selections.count();
@ -12002,7 +12009,7 @@ impl Editor {
return; return;
}; };
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
@ -12042,7 +12049,7 @@ impl Editor {
return; return;
}; };
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let autoscroll = if action.center_cursor { let autoscroll = if action.center_cursor {
Autoscroll::center() Autoscroll::center()
@ -12070,7 +12077,7 @@ impl Editor {
} }
pub fn select_down(&mut self, _: &SelectDown, window: &mut Window, cx: &mut Context<Self>) { pub fn select_down(&mut self, _: &SelectDown, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| { s.move_heads_with(|map, head, goal| {
@ -12129,7 +12136,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_cursors_with(|map, head, _| { s.move_cursors_with(|map, head, _| {
( (
@ -12146,7 +12153,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_cursors_with(|map, head, _| { s.move_cursors_with(|map, head, _| {
( (
@ -12163,7 +12170,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12180,7 +12187,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12197,7 +12204,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.select_autoclose_pair(window, cx); this.select_autoclose_pair(window, cx);
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
@ -12222,7 +12229,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.select_autoclose_pair(window, cx); this.select_autoclose_pair(window, cx);
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
@ -12243,7 +12250,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_cursors_with(|map, head, _| { s.move_cursors_with(|map, head, _| {
(movement::next_word_end(map, head), SelectionGoal::None) (movement::next_word_end(map, head), SelectionGoal::None)
@ -12257,7 +12264,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_cursors_with(|map, head, _| { s.move_cursors_with(|map, head, _| {
(movement::next_subword_end(map, head), SelectionGoal::None) (movement::next_subword_end(map, head), SelectionGoal::None)
@ -12271,7 +12278,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
(movement::next_word_end(map, head), SelectionGoal::None) (movement::next_word_end(map, head), SelectionGoal::None)
@ -12285,7 +12292,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
(movement::next_subword_end(map, head), SelectionGoal::None) (movement::next_subword_end(map, head), SelectionGoal::None)
@ -12299,7 +12306,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
@ -12323,7 +12330,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
@ -12343,7 +12350,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_cursors_with(|map, head, _| { s.move_cursors_with(|map, head, _| {
( (
@ -12365,7 +12372,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12387,7 +12394,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| { this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|_, selection| { s.move_with(|_, selection| {
@ -12413,7 +12420,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_cursors_with(|map, head, _| { s.move_cursors_with(|map, head, _| {
( (
@ -12430,7 +12437,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12447,7 +12454,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.select_to_end_of_line( this.select_to_end_of_line(
&SelectToEndOfLine { &SelectToEndOfLine {
@ -12466,7 +12473,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
this.select_to_end_of_line( this.select_to_end_of_line(
&SelectToEndOfLine { &SelectToEndOfLine {
@ -12489,7 +12496,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
selection.collapse_to( selection.collapse_to(
@ -12510,7 +12517,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
selection.collapse_to( selection.collapse_to(
@ -12531,7 +12538,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12552,7 +12559,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12573,7 +12580,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
selection.collapse_to( selection.collapse_to(
@ -12623,7 +12630,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
selection.collapse_to( selection.collapse_to(
@ -12648,7 +12655,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| { s.move_with(|map, selection| {
selection.collapse_to( selection.collapse_to(
@ -12673,7 +12680,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12694,7 +12701,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12715,7 +12722,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12736,7 +12743,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| { s.move_heads_with(|map, head, _| {
( (
@ -12757,7 +12764,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.select_ranges(vec![0..0]); s.select_ranges(vec![0..0]);
}); });
@ -12771,7 +12778,7 @@ impl Editor {
) { ) {
let mut selection = self.selections.last::<Point>(cx); let mut selection = self.selections.last::<Point>(cx);
selection.set_head(Point::zero(), SelectionGoal::None); selection.set_head(Point::zero(), SelectionGoal::None);
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.select(vec![selection]); s.select(vec![selection]);
}); });
@ -12782,7 +12789,7 @@ impl Editor {
cx.propagate(); cx.propagate();
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let cursor = self.buffer.read(cx).read(cx).len(); let cursor = self.buffer.read(cx).read(cx).len();
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.select_ranges(vec![cursor..cursor]) s.select_ranges(vec![cursor..cursor])
@ -12839,7 +12846,7 @@ impl Editor {
} }
pub fn select_to_end(&mut self, _: &SelectToEnd, window: &mut Window, cx: &mut Context<Self>) { pub fn select_to_end(&mut self, _: &SelectToEnd, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let buffer = self.buffer.read(cx).snapshot(cx); let buffer = self.buffer.read(cx).snapshot(cx);
let mut selection = self.selections.first::<usize>(cx); let mut selection = self.selections.first::<usize>(cx);
selection.set_head(buffer.len(), SelectionGoal::None); selection.set_head(buffer.len(), SelectionGoal::None);
@ -12849,7 +12856,7 @@ impl Editor {
} }
pub fn select_all(&mut self, _: &SelectAll, window: &mut Window, cx: &mut Context<Self>) { pub fn select_all(&mut self, _: &SelectAll, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let end = self.buffer.read(cx).read(cx).len(); let end = self.buffer.read(cx).read(cx).len();
self.change_selections(None, window, cx, |s| { self.change_selections(None, window, cx, |s| {
s.select_ranges(vec![0..end]); s.select_ranges(vec![0..end]);
@ -12857,7 +12864,7 @@ impl Editor {
} }
pub fn select_line(&mut self, _: &SelectLine, window: &mut Window, cx: &mut Context<Self>) { pub fn select_line(&mut self, _: &SelectLine, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let mut selections = self.selections.all::<Point>(cx); let mut selections = self.selections.all::<Point>(cx);
let max_point = display_map.buffer_snapshot.max_point(); let max_point = display_map.buffer_snapshot.max_point();
@ -12928,7 +12935,7 @@ impl Editor {
} }
fn add_selection(&mut self, above: bool, window: &mut Window, cx: &mut Context<Self>) { fn add_selection(&mut self, above: bool, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let all_selections = self.selections.all::<Point>(cx); let all_selections = self.selections.all::<Point>(cx);
@ -13258,7 +13265,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Result<()> { ) -> Result<()> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
@ -13311,7 +13318,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Result<()> { ) -> Result<()> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
self.select_next_match_internal( self.select_next_match_internal(
&display_map, &display_map,
@ -13329,7 +13336,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Result<()> { ) -> Result<()> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let buffer = &display_map.buffer_snapshot; let buffer = &display_map.buffer_snapshot;
let mut selections = self.selections.all::<usize>(cx); let mut selections = self.selections.all::<usize>(cx);
@ -13522,7 +13529,7 @@ impl Editor {
if self.read_only(cx) { if self.read_only(cx) {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let text_layout_details = &self.text_layout_details(window); let text_layout_details = &self.text_layout_details(window);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
let mut selections = this.selections.all::<MultiBufferPoint>(cx); let mut selections = this.selections.all::<MultiBufferPoint>(cx);
@ -13822,7 +13829,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let buffer = self.buffer.read(cx).snapshot(cx); let buffer = self.buffer.read(cx).snapshot(cx);
let old_selections = self.selections.all::<usize>(cx).into_boxed_slice(); let old_selections = self.selections.all::<usize>(cx).into_boxed_slice();
@ -13885,7 +13892,7 @@ impl Editor {
return; return;
} }
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx)); let display_map = self.display_map.update(cx, |map, cx| map.snapshot(cx));
let buffer = self.buffer.read(cx).snapshot(cx); let buffer = self.buffer.read(cx).snapshot(cx);
@ -14016,7 +14023,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
if let Some((mut selections, scroll_behavior, is_selection_reversed)) = if let Some((mut selections, scroll_behavior, is_selection_reversed)) =
self.select_syntax_node_history.pop() self.select_syntax_node_history.pop()
@ -14290,7 +14297,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| { self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_offsets_with(|snapshot, selection| { s.move_offsets_with(|snapshot, selection| {
let Some(enclosing_bracket_ranges) = let Some(enclosing_bracket_ranges) =
@ -14347,7 +14354,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
if let Some(entry) = self.selection_history.undo_stack.pop_back() { if let Some(entry) = self.selection_history.undo_stack.pop_back() {
self.selection_history.mode = SelectionHistoryMode::Undoing; self.selection_history.mode = SelectionHistoryMode::Undoing;
self.with_selection_effects_deferred(window, cx, |this, window, cx| { self.with_selection_effects_deferred(window, cx, |this, window, cx| {
@ -14370,7 +14377,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
if let Some(entry) = self.selection_history.redo_stack.pop_back() { if let Some(entry) = self.selection_history.redo_stack.pop_back() {
self.selection_history.mode = SelectionHistoryMode::Redoing; self.selection_history.mode = SelectionHistoryMode::Redoing;
self.with_selection_effects_deferred(window, cx, |this, window, cx| { self.with_selection_effects_deferred(window, cx, |this, window, cx| {
@ -14516,7 +14523,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.go_to_diagnostic_impl(Direction::Next, window, cx) self.go_to_diagnostic_impl(Direction::Next, window, cx)
} }
@ -14526,7 +14533,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.go_to_diagnostic_impl(Direction::Prev, window, cx) self.go_to_diagnostic_impl(Direction::Prev, window, cx)
} }
@ -14611,7 +14618,7 @@ impl Editor {
} }
pub fn go_to_next_hunk(&mut self, _: &GoToHunk, window: &mut Window, cx: &mut Context<Self>) { pub fn go_to_next_hunk(&mut self, _: &GoToHunk, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let snapshot = self.snapshot(window, cx); let snapshot = self.snapshot(window, cx);
let selection = self.selections.newest::<Point>(cx); let selection = self.selections.newest::<Point>(cx);
self.go_to_hunk_before_or_after_position( self.go_to_hunk_before_or_after_position(
@ -14672,7 +14679,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction); self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let snapshot = self.snapshot(window, cx); let snapshot = self.snapshot(window, cx);
let selection = self.selections.newest::<Point>(cx); let selection = self.selections.newest::<Point>(cx);
self.go_to_hunk_before_or_after_position( self.go_to_hunk_before_or_after_position(
@ -15679,7 +15686,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let project = match &self.project { let project = match &self.project {
Some(project) => project.clone(), Some(project) => project.clone(),
@ -15701,7 +15708,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let project = match &self.project { let project = match &self.project {
Some(project) => project.clone(), Some(project) => project.clone(),
@ -15823,7 +15830,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> { ) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let project = match &self.project { let project = match &self.project {
Some(project) => project.clone(), Some(project) => project.clone(),
None => return None, None => return None,
@ -17175,7 +17182,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let buffers = self.buffer.read(cx).all_buffers(); let buffers = self.buffer.read(cx).all_buffers();
for branch_buffer in buffers { for branch_buffer in buffers {
@ -17204,7 +17211,7 @@ impl Editor {
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) { ) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let snapshot = self.snapshot(window, cx); let snapshot = self.snapshot(window, cx);
let hunks = snapshot.hunks_for_ranges(self.selections.ranges(cx)); let hunks = snapshot.hunks_for_ranges(self.selections.ranges(cx));
let mut ranges_by_buffer = HashMap::default(); let mut ranges_by_buffer = HashMap::default();
@ -18236,7 +18243,7 @@ impl Editor {
} }
fn insert_uuid(&mut self, version: UuidVersion, window: &mut Window, cx: &mut Context<Self>) { fn insert_uuid(&mut self, version: UuidVersion, window: &mut Window, cx: &mut Context<Self>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction); self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| { self.transact(window, cx, |this, window, cx| {
let edits = this let edits = this
.selections .selections

View file

@ -1085,7 +1085,7 @@ impl EditorElement {
let text_hovered = text_hitbox.is_hovered(window); let text_hovered = text_hitbox.is_hovered(window);
let gutter_hovered = gutter_hitbox.is_hovered(window); let gutter_hovered = gutter_hitbox.is_hovered(window);
editor.set_gutter_hovered(gutter_hovered, cx); editor.set_gutter_hovered(gutter_hovered, cx);
editor.mouse_cursor_hidden = false; editor.show_mouse_cursor(cx);
let point_for_position = position_map.point_for_position(event.position); let point_for_position = position_map.point_for_position(event.position);
let valid_point = point_for_position.previous_valid; let valid_point = point_for_position.previous_valid;

View file

@ -790,8 +790,8 @@ impl Vim {
if let Some(action) = keystroke_event.action.as_ref() { if let Some(action) = keystroke_event.action.as_ref() {
// Keystroke is handled by the vim system, so continue forward // Keystroke is handled by the vim system, so continue forward
if action.name().starts_with("vim::") { if action.name().starts_with("vim::") {
self.update_editor(window, cx, |_, editor, _, _| { self.update_editor(window, cx, |_, editor, _, cx| {
editor.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction) editor.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx)
}); });
return; return;
} }