Repository navigation
text: Preserve logical selection across presentation changes - #3421
Merged
Merged
Conversation
TomiXRM
marked this pull request as draft
October 8, 2026 17:19
Contributor
Author
|
追加の静的レビューで、幅のみの変更と、その後のスクロールにおける論理選択保持に2件のリスクが見つかりました。既存1969件の通過だけではこの境界を保証できないため draft に戻しました。再現ケースを追加し、通常の追加commitで修正・再検証します。現在のheadを完成済みとは扱いません。 |
Contributor
Author
|
追加commit 6c783a2 で2件を修正しました。幅単独の実リフロー、およびfont+width更新後の外側origin移動を、実ドラッグ・論理source range・Copy dispatch・複数paint・新規dragの回帰で検証しています。gpui-base/component test-support全1970件、fmt、Clippy通過。追加commitの静的再レビューでも先の2件の解消を確認しました。既定falseとsource/parser無効化は維持します。これらは公開headの検証で、main統合後のbuild/testは上流CIの結果を別途確認します。 |
TomiXRM
marked this pull request as ready for review
October 8, 2026 17:40
huacnlee
enabled auto-merge (squash)
October 9, 2026 13:41
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
Completed partial selections in a managed
TextViewStateshould survive presentation changes when the source is unchanged. This PR retains the logical selection range and Copy payload across style, syntax-highlighter, inherited-font, zoom, and width changes by default. It adds no configuration API.Current styles and wrapping still apply. The retained range is not reconstructed by projecting an old pointer rectangle onto the new layout, and later outer-layout origin changes do not become new selection gestures. A new drag or explicit clear updates selection normally. Source replacement and Markdown parser-configuration replacement still invalidate selection.
The owning view must retain both the state and its painted selection participant. This behavior does not pin rows unmounted by an outer virtual list. Changes are confined to SDK selection policy; GPUI and platform input are not patched. The changes were developed with AI assistance.
Motivation: Kagi issue #1091. This PR addresses selection behavior and does not claim to complete the broader conversation-performance work.
Public API
No public APIs are added, removed, or changed relative to the base branch. The opt-in builder proposed in earlier revisions has been removed; presentation-only changes now preserve completed selections by default.
Validation
Validated locally after commit
48cc5389a:text::: all 400 passed.gpui_kit::open_windowthrough the shared test helper.cargo fmt --all --check: passed.--deny warnings: passed.git diff --check: passed.Coverage includes completed partial selection and Copy across color, width-only, font, zoom, and origin changes; cross-block and cross-renderer reflow; new drags replacing retained ranges; explicit clear; source replacement; and parser-configuration replacement. Syntax-highlighter changes apply new presentation while preserving the selection. The existing Component regression now verifies default retention after same-size style changes.
The Base README and English/Chinese TextView documentation describe the default behavior and mounted-participant requirement. Native GUI/performance evaluation has not been performed for this update. Results from CI on earlier revisions do not validate the latest head.