documents: right presses keep a selection; Delete Image
CI / platforms (windows-latest) (push) Failing after 9s
CI / site (push) Successful in 21s
CI / crate (push) Failing after 12m8s
CI / platforms (ubuntu-24.04) (push) Canceled after 0s

A right press in a text field or the code editor keeps a selection it
lands in, else moves the caret. In visual mode a right press in the open
block keeps it open and emits Pointed, read apart from the whole text.
MarkdownDocument::delete_image removes the picture at the caret.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-10-14 18:15:38 -04:00
1 parent 6c2d28c56e
commit 013f14216f
9 files changed
+284 -5

No files matched your search

+27
View File
@@ -335,6 +335,12 @@ impl CodeEditor {
editor.press(line, event, window, cx)
}),
)
.on_mouse_down(
MouseButton::Right,
cx.listener(move |editor, event: &MouseDownEvent, window, cx| {
editor.secondary_press(line, event, window, cx)
}),
)
.on_mouse_move(cx.listener(move |editor, event: &MouseMoveEvent, _, cx| {
editor.drag(line, event, cx)
}));
@@ -392,6 +398,27 @@ impl CodeEditor {
self.set_selections(chosen, cx);
}
/// A right press keeps a selection it lands in.
pub(crate) fn secondary_press(
&mut self,
line: usize,
event: &MouseDownEvent,
window: &mut Window,
cx: &mut Context<Self>,
) {
window.focus(&self.focus, cx);
let Some(at) = self.offset_in(line, event.position.x, cx) else {
return;
};
let held = (self.selections.iter()).any(|selection| {
let range = selection.range();
!range.is_empty() && (range.start..=range.end).contains(&at)
});
if !held {
self.set_selections(vec![Selection::caret(at)], cx);
}
}
/// A drag over a line stretches the primary selection to where the pointer is.
pub(crate) fn drag(&mut self, line: usize, event: &MouseMoveEvent, cx: &mut Context<Self>) {
if !self.dragging || !event.dragging() {