[webkit-changes] [WebKit/WebKit] 08a51b: [iOS] [Visual Bidi Selection] Selection sometimes ...

Wenson Hsieh noreply at github.com
Tue Jan 28 07:50:03 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 08a51bcc0dfde7f741158d1705b202e1da805339
      https://github.com/WebKit/WebKit/commit/08a51bcc0dfde7f741158d1705b202e1da805339
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2025-01-28 (Tue, 28 Jan 2025)

  Changed paths:
    A LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-6-expected.txt
    A LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-6.html
    M LayoutTests/resources/ui-helper.js
    M Source/WebCore/editing/Editing.cpp

  Log Message:
  -----------
  [iOS] [Visual Bidi Selection] Selection sometimes shrinks when selecting a paragraph that ends with RLE character
https://bugs.webkit.org/show_bug.cgi?id=286582
rdar://143265072

Reviewed by Abrar Rahman Protyasha.

Fix a corner case in how we select the closest bidi text boundary when making a selected text range
both visually and logically contiguous, which causes the selection to snap to the (visually)
farthest boundary instead of the closer one. See below (`findBidiBoundary`) for more details.

* LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-6-expected.txt: Added.
* LayoutTests/editing/selection/ios/bidi-visually-contiguous-selection-6.html: Added.

Add a layout test to exercise this change by selecting from the first Arabic word in the paragraph,
to the end of `iPhone`; verify that the entire paragraph remains selected.

* LayoutTests/resources/ui-helper.js:
(window.UIHelper.async selectionBounds):

Add a `UIHelper` method to compute the overall bounding rect of the selection.

* Source/WebCore/editing/Editing.cpp:
(WebCore::findBidiBoundary):

Implement the main fix here — if the left boundary point is visually closer, we currently choose the
right boundary point and vice versa. This works for the most part, where the selection direction is
opposite of the direction of the bidi text run that contains the new boundaries (since selecting the
left boundary will have the effect of visually selecting to the right boundary and vice versa).
However, in the case where the direction *matches* the direction of the bidi text run containing the
extent, this reversal doesn't happen, so moving the selection extent to the left/right boundaries
will actually visually select to the left/right boundaries, respectively.

To account for this, we consider the selection direction when determining which bidi boundary point
to snap to after ending range adjustment.

(WebCore::makeVisuallyContiguousIfNeeded):

Pass in the direction of the selected text on the first and/or last line (see above).

Canonical link: https://commits.webkit.org/289452@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list