| Index: Source/core/editing/VisibleUnits.cpp
|
| diff --git a/Source/core/editing/VisibleUnits.cpp b/Source/core/editing/VisibleUnits.cpp
|
| index 73387b78649bf6738235c489eacfe16437efa813..ac869ec2975d813223dcd64b797d2bc1024d9332 100644
|
| --- a/Source/core/editing/VisibleUnits.cpp
|
| +++ b/Source/core/editing/VisibleUnits.cpp
|
| @@ -351,7 +351,7 @@ static VisiblePosition visualWordPosition(const VisiblePosition& visiblePosition
|
| if (visiblePosition.isNull())
|
| return VisiblePosition();
|
|
|
| - TextDirection blockDirection = directionOfEnclosingBlock(visiblePosition.deepEquivalent());
|
| + bool isLeftToRight = isEnclosingBoxHasLeftToRightDirection(visiblePosition.deepEquivalent());
|
| InlineBox* previouslyVisitedBox = 0;
|
| VisiblePosition current = visiblePosition;
|
| TextBreakIterator* iter = 0;
|
| @@ -397,7 +397,7 @@ static VisiblePosition visualWordPosition(const VisiblePosition& visiblePosition
|
| int offsetInIterator = offsetInBox - textBox->start() + previousBoxLength;
|
|
|
| bool isWordBreak;
|
| - bool boxHasSameDirectionalityAsBlock = box->direction() == blockDirection;
|
| + bool boxHasSameDirectionalityAsBlock = isLeftToRight ? box->direction() == LTR : box->direction() == RTL;
|
| bool movingBackward = (direction == MoveLeft && box->direction() == LTR) || (direction == MoveRight && box->direction() == RTL);
|
| if ((skipsSpaceWhenMovingRight && boxHasSameDirectionalityAsBlock)
|
| || (!skipsSpaceWhenMovingRight && movingBackward)) {
|
| @@ -422,10 +422,9 @@ VisiblePosition leftWordPosition(const VisiblePosition& visiblePosition, bool sk
|
| leftWordBreak = visiblePosition.honorEditingBoundaryAtOrBefore(leftWordBreak);
|
|
|
| // FIXME: How should we handle a non-editable position?
|
| - if (leftWordBreak.isNull() && isEditablePosition(visiblePosition.deepEquivalent())) {
|
| - TextDirection blockDirection = directionOfEnclosingBlock(visiblePosition.deepEquivalent());
|
| - leftWordBreak = blockDirection == LTR ? startOfEditableContent(visiblePosition) : endOfEditableContent(visiblePosition);
|
| - }
|
| + if (leftWordBreak.isNull() && isEditablePosition(visiblePosition.deepEquivalent()))
|
| + leftWordBreak = isEnclosingBoxHasLeftToRightDirection(visiblePosition.deepEquivalent()) ? startOfEditableContent(visiblePosition) : endOfEditableContent(visiblePosition);
|
| +
|
| return leftWordBreak;
|
| }
|
|
|
| @@ -435,10 +434,9 @@ VisiblePosition rightWordPosition(const VisiblePosition& visiblePosition, bool s
|
| rightWordBreak = visiblePosition.honorEditingBoundaryAtOrBefore(rightWordBreak);
|
|
|
| // FIXME: How should we handle a non-editable position?
|
| - if (rightWordBreak.isNull() && isEditablePosition(visiblePosition.deepEquivalent())) {
|
| - TextDirection blockDirection = directionOfEnclosingBlock(visiblePosition.deepEquivalent());
|
| - rightWordBreak = blockDirection == LTR ? endOfEditableContent(visiblePosition) : startOfEditableContent(visiblePosition);
|
| - }
|
| + if (rightWordBreak.isNull() && isEditablePosition(visiblePosition.deepEquivalent()))
|
| + rightWordBreak = isEnclosingBoxHasLeftToRightDirection(visiblePosition.deepEquivalent()) ? endOfEditableContent(visiblePosition) : startOfEditableContent(visiblePosition);
|
| +
|
| return rightWordBreak;
|
| }
|
|
|
|
|