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 {
editor.show_mouse_cursor();
editor.show_mouse_cursor(cx);
}
}),
],
@ -2312,12 +2312,15 @@ impl Editor {
key_context
}
fn show_mouse_cursor(&mut self) {
self.mouse_cursor_hidden = false;
fn show_mouse_cursor(&mut self, cx: &mut Context<Self>) {
if self.mouse_cursor_hidden {
self.mouse_cursor_hidden = false;
cx.notify();
}
}
pub fn hide_mouse_cursor(&mut self, origin: &HideMouseCursorOrigin) {
self.mouse_cursor_hidden = match origin {
pub fn hide_mouse_cursor(&mut self, origin: HideMouseCursorOrigin, cx: &mut Context<Self>) {
let hide_mouse_cursor = match origin {
HideMouseCursorOrigin::TypingAction => {
matches!(
self.hide_mouse_mode,
@ -2328,6 +2331,10 @@ impl Editor {
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 {
@ -3768,7 +3775,7 @@ impl Editor {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let selections = self.selections.all_adjusted(cx);
let mut bracket_inserted = false;
@ -4191,7 +4198,7 @@ impl Editor {
}
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| {
let (edits_with_flags, selection_info): (Vec<_>, Vec<_>) = {
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let buffer = self.buffer.read(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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let buffer = self.buffer.read(cx);
let snapshot = buffer.snapshot(cx);
@ -5537,7 +5544,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> 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)
}
@ -5547,7 +5554,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.do_completion(None, CompletionIntent::CompleteWithInsert, window, cx)
}
@ -5557,7 +5564,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.do_completion(None, CompletionIntent::CompleteWithReplace, window, cx)
}
@ -5567,7 +5574,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> 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)
}
@ -5996,7 +6003,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let actions_menu =
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
this.select_autoclose_pair(window, cx);
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
@ -9475,7 +9482,7 @@ impl Editor {
}
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) {
return;
}
@ -9484,13 +9491,13 @@ impl Editor {
pub fn tab(&mut self, _: &Tab, window: &mut Window, cx: &mut Context<Self>) {
if self.move_to_next_snippet_tabstop(window, cx) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
return;
}
if self.read_only(cx) {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let mut selections = self.selections.all_adjusted(cx);
let buffer = self.buffer.read(cx);
let snapshot = buffer.snapshot(cx);
@ -9603,7 +9610,7 @@ impl Editor {
if self.read_only(cx) {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let mut selections = self.selections.all::<Point>(cx);
let mut prev_edited_row = 0;
let mut row_delta = 0;
@ -9708,7 +9715,7 @@ impl Editor {
if self.read_only(cx) {
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 selections = self.selections.all::<Point>(cx);
let mut deletion_ranges = Vec::new();
@ -9782,7 +9789,7 @@ impl Editor {
if self.read_only(cx) {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let selections = self
.selections
.all::<usize>(cx)
@ -9801,7 +9808,7 @@ impl Editor {
}
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 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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.join_lines_impl(true, window, cx);
}
@ -10012,7 +10019,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let mut buffer_ids = HashSet::default();
let snapshot = self.buffer().read(cx).snapshot(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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let selections = self
.selections
.all(cx)
@ -10453,7 +10460,7 @@ impl Editor {
) where
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 buffer = self.buffer.read(cx).snapshot(cx);
@ -10778,7 +10785,7 @@ impl Editor {
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 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>) {
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 buffer = self.buffer.read(cx).snapshot(cx);
@ -10971,7 +10978,7 @@ impl Editor {
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 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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let text_layout_details = &self.text_layout_details(window);
self.transact(window, cx, |this, window, cx| {
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, 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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let item = self.cut_common(window, cx);
cx.write_to_clipboard(item);
}
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| {
s.move_with(|snapshot, sel| {
if sel.is_empty() {
@ -11398,7 +11405,7 @@ impl Editor {
window: &mut Window,
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() {
if let Some(ClipboardEntry::String(kill_ring)) = item.entries().first() {
(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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
if let Some(item) = cx.read_from_clipboard() {
let entries = item.entries();
@ -11620,7 +11627,7 @@ impl Editor {
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((selections, _)) =
@ -11650,7 +11657,7 @@ impl Editor {
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((_, Some(selections))) =
@ -11685,7 +11692,7 @@ impl Editor {
}
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| {
s.move_with(|map, selection| {
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| (movement::right(map, head), SelectionGoal::None));
})
@ -11736,7 +11743,7 @@ impl Editor {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window);
let selection_count = self.selections.count();
@ -11779,7 +11786,7 @@ impl Editor {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window);
@ -11816,7 +11823,7 @@ impl Editor {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window);
@ -11844,7 +11851,7 @@ impl Editor {
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);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| {
@ -11859,7 +11866,7 @@ impl Editor {
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);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| {
@ -11878,7 +11885,7 @@ impl Editor {
return;
};
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window);
@ -11918,7 +11925,7 @@ impl Editor {
return;
};
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let autoscroll = if action.center_cursor {
Autoscroll::center()
@ -11947,7 +11954,7 @@ impl Editor {
}
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);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| {
@ -11964,7 +11971,7 @@ impl Editor {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window);
let selection_count = self.selections.count();
@ -12002,7 +12009,7 @@ impl Editor {
return;
};
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let text_layout_details = &self.text_layout_details(window);
@ -12042,7 +12049,7 @@ impl Editor {
return;
};
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let autoscroll = if action.center_cursor {
Autoscroll::center()
@ -12070,7 +12077,7 @@ impl Editor {
}
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);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, goal| {
@ -12129,7 +12136,7 @@ impl Editor {
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| {
s.move_cursors_with(|map, head, _| {
(
@ -12146,7 +12153,7 @@ impl Editor {
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| {
s.move_cursors_with(|map, head, _| {
(
@ -12163,7 +12170,7 @@ impl Editor {
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| {
s.move_heads_with(|map, head, _| {
(
@ -12180,7 +12187,7 @@ impl Editor {
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| {
s.move_heads_with(|map, head, _| {
(
@ -12197,7 +12204,7 @@ impl Editor {
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| {
this.select_autoclose_pair(window, cx);
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
@ -12222,7 +12229,7 @@ impl Editor {
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| {
this.select_autoclose_pair(window, cx);
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
@ -12243,7 +12250,7 @@ impl Editor {
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| {
s.move_cursors_with(|map, head, _| {
(movement::next_word_end(map, head), SelectionGoal::None)
@ -12257,7 +12264,7 @@ impl Editor {
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| {
s.move_cursors_with(|map, head, _| {
(movement::next_subword_end(map, head), SelectionGoal::None)
@ -12271,7 +12278,7 @@ impl Editor {
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| {
s.move_heads_with(|map, head, _| {
(movement::next_word_end(map, head), SelectionGoal::None)
@ -12285,7 +12292,7 @@ impl Editor {
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| {
s.move_heads_with(|map, head, _| {
(movement::next_subword_end(map, head), SelectionGoal::None)
@ -12299,7 +12306,7 @@ impl Editor {
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| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
@ -12323,7 +12330,7 @@ impl Editor {
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| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
@ -12343,7 +12350,7 @@ impl Editor {
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| {
s.move_cursors_with(|map, head, _| {
(
@ -12365,7 +12372,7 @@ impl Editor {
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| {
s.move_heads_with(|map, head, _| {
(
@ -12387,7 +12394,7 @@ impl Editor {
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| {
this.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|_, selection| {
@ -12413,7 +12420,7 @@ impl Editor {
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| {
s.move_cursors_with(|map, head, _| {
(
@ -12430,7 +12437,7 @@ impl Editor {
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| {
s.move_heads_with(|map, head, _| {
(
@ -12447,7 +12454,7 @@ impl Editor {
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| {
this.select_to_end_of_line(
&SelectToEndOfLine {
@ -12466,7 +12473,7 @@ impl Editor {
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| {
this.select_to_end_of_line(
&SelectToEndOfLine {
@ -12489,7 +12496,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
selection.collapse_to(
@ -12510,7 +12517,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
selection.collapse_to(
@ -12531,7 +12538,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| {
(
@ -12552,7 +12559,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| {
(
@ -12573,7 +12580,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
selection.collapse_to(
@ -12623,7 +12630,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
selection.collapse_to(
@ -12648,7 +12655,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_with(|map, selection| {
selection.collapse_to(
@ -12673,7 +12680,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| {
(
@ -12694,7 +12701,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| {
(
@ -12715,7 +12722,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| {
(
@ -12736,7 +12743,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.move_heads_with(|map, head, _| {
(
@ -12757,7 +12764,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
s.select_ranges(vec![0..0]);
});
@ -12771,7 +12778,7 @@ impl Editor {
) {
let mut selection = self.selections.last::<Point>(cx);
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| {
s.select(vec![selection]);
});
@ -12782,7 +12789,7 @@ impl Editor {
cx.propagate();
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let cursor = self.buffer.read(cx).read(cx).len();
self.change_selections(Some(Autoscroll::fit()), window, cx, |s| {
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let buffer = self.buffer.read(cx).snapshot(cx);
let mut selection = self.selections.first::<usize>(cx);
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::MovementAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::MovementAction, cx);
let end = self.buffer.read(cx).read(cx).len();
self.change_selections(None, window, cx, |s| {
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>) {
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 mut selections = self.selections.all::<Point>(cx);
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>) {
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 all_selections = self.selections.all::<Point>(cx);
@ -13258,7 +13265,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> 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));
@ -13311,7 +13318,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> 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));
self.select_next_match_internal(
&display_map,
@ -13329,7 +13336,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> 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 buffer = &display_map.buffer_snapshot;
let mut selections = self.selections.all::<usize>(cx);
@ -13522,7 +13529,7 @@ impl Editor {
if self.read_only(cx) {
return;
}
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let text_layout_details = &self.text_layout_details(window);
self.transact(window, cx, |this, window, cx| {
let mut selections = this.selections.all::<MultiBufferPoint>(cx);
@ -13822,7 +13829,7 @@ impl Editor {
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 old_selections = self.selections.all::<usize>(cx).into_boxed_slice();
@ -13885,7 +13892,7 @@ impl Editor {
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 buffer = self.buffer.read(cx).snapshot(cx);
@ -14016,7 +14023,7 @@ impl Editor {
window: &mut Window,
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)) =
self.select_syntax_node_history.pop()
@ -14290,7 +14297,7 @@ impl Editor {
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| {
s.move_offsets_with(|snapshot, selection| {
let Some(enclosing_bracket_ranges) =
@ -14347,7 +14354,7 @@ impl Editor {
window: &mut Window,
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() {
self.selection_history.mode = SelectionHistoryMode::Undoing;
self.with_selection_effects_deferred(window, cx, |this, window, cx| {
@ -14370,7 +14377,7 @@ impl Editor {
window: &mut Window,
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() {
self.selection_history.mode = SelectionHistoryMode::Redoing;
self.with_selection_effects_deferred(window, cx, |this, window, cx| {
@ -14516,7 +14523,7 @@ impl Editor {
window: &mut Window,
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)
}
@ -14526,7 +14533,7 @@ impl Editor {
window: &mut Window,
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)
}
@ -14611,7 +14618,7 @@ impl Editor {
}
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 selection = self.selections.newest::<Point>(cx);
self.go_to_hunk_before_or_after_position(
@ -14672,7 +14679,7 @@ impl Editor {
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 selection = self.selections.newest::<Point>(cx);
self.go_to_hunk_before_or_after_position(
@ -15679,7 +15686,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let project = match &self.project {
Some(project) => project.clone(),
@ -15701,7 +15708,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let project = match &self.project {
Some(project) => project.clone(),
@ -15823,7 +15830,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) -> Option<Task<Result<()>>> {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let project = match &self.project {
Some(project) => project.clone(),
None => return None,
@ -17175,7 +17182,7 @@ impl Editor {
window: &mut Window,
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();
for branch_buffer in buffers {
@ -17204,7 +17211,7 @@ impl Editor {
window: &mut Window,
cx: &mut Context<Self>,
) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
let snapshot = self.snapshot(window, cx);
let hunks = snapshot.hunks_for_ranges(self.selections.ranges(cx));
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>) {
self.hide_mouse_cursor(&HideMouseCursorOrigin::TypingAction);
self.hide_mouse_cursor(HideMouseCursorOrigin::TypingAction, cx);
self.transact(window, cx, |this, window, cx| {
let edits = this
.selections

View file

@ -1085,7 +1085,7 @@ impl EditorElement {
let text_hovered = text_hitbox.is_hovered(window);
let gutter_hovered = gutter_hitbox.is_hovered(window);
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 valid_point = point_for_position.previous_valid;

View file

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