check selection's visible width when copying on mouse click (#2711)

* check selection's visible width when copying on mouse click

Mouse-click-up copies the selection produced by dragging. The event
is ignored if the selection has a width of 1 though so you don't
copy when clicking rather than dragging. The current check copies
text when it has a visible width of 1 but is actually multiple
characters in the rope like a CRLF line-ending. With this change
we check the unicode width of the character(s) in the selection
rather than the range length, so clicking on a CRLF line-ending
does not copy.

* use range.fragment to simplify getting the primary selection width
pull/2872/head
Michael Davis 2 years ago committed by GitHub
parent 886cff3bcc
commit d948ace67b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1127,9 +1127,14 @@ impl EditorView {
} }
let (view, doc) = current!(cxt.editor); let (view, doc) = current!(cxt.editor);
let range = doc.selection(view.id).primary();
if range.to() - range.from() <= 1 { if doc
.selection(view.id)
.primary()
.fragment(doc.text().slice(..))
.width()
<= 1
{
return EventResult::Ignored(None); return EventResult::Ignored(None);
} }

Loading…
Cancel
Save