Add behavior for multiple click and drag to markdown component (#43813)
Closes #43354
Overview:
In a diagnostic panel (and all Markdown derived panels, including
function hint popovers and the like), the expected behavior is that when
a user double clicks a word, the whole word is highlighted. If they
double click and hold, then drag, the text selection proceeds word by
word. There is similar behavior for triple click which goes line by
line, and quadruple click which selects all text.
Before this fix, the DiagnosticPopover allowed the user to click and
drag, but double click and drag reverts to selecting text character by
character. The same wrong behavior is shown for triple click (line).
Quadruple click (all text) was not previously implemented in
MarkdownElement.
Quick example of wrong behavior, showing single click and drag, double
click and drag, triple click and drag, then quadruple click (fails).
https://github.com/user-attachments/assets/1184e64d-5467-4504-bbb6-404546eab90a
Quick example showing the correct behavior fixed in this PR:
https://github.com/user-attachments/assets/06bf5398-d6d6-496c-8fe9-705031207f05
Nota bene:
I'm not a rust dev, so a lot of this relied on my C/C++ experience,
cribbing from elsewhere in the repo, and help from Claude. If that's not
ok for this project, I totally understand.
Much of this was informed by editor.rs, using a similar pattern to
SelectMode in there (see lines 450, and begin_selection and
extend_selection). It didn't seem appropriate to import SelectMode from
there (also Markdown range and Anchor range seemed different enough),
nor did it seem appropriate to move SelectMode to markdown.rs.
The tests are non-ui based, instead testing the relevant functions. Not
sure if that's what's expected.
Release Notes:
- Double- and triple-click selection now correctly expands by word and
by line within Markdown elements (diagnostics, agent panel, etc.).
3076c4ee4eRMcGhee committed on 12/15/2025, 7:21:34 PM· committed by GitHubparent0410b23