Fix/selection context menu out of view#2739
Open
Alspb wants to merge 2 commits into
Open
Conversation
There was a problem hiding this comment.
Pull request overview
This PR fixes cases where the selection context menu (Cut/Copy/Paste) could be positioned off-screen when a selection extends beyond the visible editor viewport by clamping the context-menu anchor points into the visible region (aiming to match native multiline TextField behavior).
Changes:
- Clamp
contextMenuAnchorsto the editor’s visible viewport region to keep the selection toolbar on-screen. - Adjust
selectAll()toolbar-driven behavior (currently adds a deterministic scroll to the top). - Update
CHANGELOG.mdwith an entry describing the fix.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| lib/src/editor/raw_editor/raw_editor_state.dart | Adds viewport-aware clamping for selection context-menu anchors (and includes a toolbar selectAll() scroll behavior change). |
| CHANGELOG.md | Documents the context-menu off-screen fix under “Unreleased / Fixed”. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+169
to
175
| if (cause == SelectionChangedCause.toolbar && scrollController.hasClients) { | ||
| // Reveal the start of the selection (the top of the document) with a | ||
| // single deterministic scroll. The post-frame `_showCaretOnScreen` | ||
| // also reveals the selection start (`endpoints.first`) bug does this | ||
| // with a lag. | ||
| scrollController.jumpTo(scrollController.position.minScrollExtent); | ||
| } |
Comment on lines
262
to
+273
| TextSelectionToolbarAnchors get contextMenuAnchors { | ||
| final glyphHeights = _getGlyphHeights(); | ||
| final selection = textEditingValue.selection; | ||
| final points = renderEditor.getEndpointsForSelection(selection); | ||
| return TextSelectionToolbarAnchors.fromSelection( | ||
| final anchors = TextSelectionToolbarAnchors.fromSelection( | ||
| renderBox: renderEditor, | ||
| startGlyphHeight: glyphHeights.startGlyphHeight, | ||
| endGlyphHeight: glyphHeights.endGlyphHeight, | ||
| selectionEndpoints: points, | ||
| ); | ||
| return _clampAnchorsToVisibleViewport(anchors); | ||
| } |
Comment on lines
+396
to
+401
| renderBoxForBounds: () => | ||
| context | ||
| .findAncestorStateOfType<QuillEditorState>() | ||
| ?.context | ||
| .findRenderObject() | ||
| as RenderBox?, |
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.
Description
The selection (Cut/Copy/Paste) context menu could be positioned off-screen,
so it didn't appear, whenever the selection extended beyond the visible
viewport. This PR clamps the menu's anchors into the editor's visible region so it
stays reachable — matching a native multiline
TextField.Type of Change