Support shift+click to extend selection (#23)#27
Merged
Conversation
Shift+click now extends the selection from the cursor (or the existing selection's far anchor) to the clicked position instead of clearing it. A shared extendSelection() unifies the logic with shift+arrow, and the parallel click handlers leave the selection alone while shift is held, fixing the intermittent failure caused by them racing to clear the extension. Fixes #23 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Gate the shift+click cursor move with !readOnly so mouse-driven shift+click matches plain-click and drag behavior; selection still extends in readOnly. Add a Compose UI test that drives the real pointer-input handlers with a held Shift modifier, guarding the parallel-handler race that the existing selection-math test cannot reach. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Shift+click now extends the selection from the existing cursor/anchor to the clicked position, instead of clearing it.
Root cause
The mouse pointer handling never checked
isShiftPressed, and three parallelpointerInputhandlers each cleared/restarted the selection on a primary press. There was no shift-click-to-extend path, and the parallel handlers racing to clear the selection caused the intermittent failures users saw.Fix
TextEditorSelectionManager.extendSelection(anchor, newPosition)that holds the far anchor fixed and returns it — unifying the logic used by shift+arrow and shift+click.handleDragInputowns shift+click extension (extends from the cursor / far anchor to the click, moves the cursor to the click).detectMouseClicksImperativelyonClick,handleTextInteractions/handleSpanInteraction) leave the selection untouched while Shift is held, removing the race.Tests
ShiftClickExtendSelectionTest(selection-extension logic, headless)../gradlew checkpasses locally.Fixes #23