Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(681)

Unified Diff: Source/core/editing/FrameSelection.cpp

Issue 14930006: Ctrl+Shift+Right in Windows should select the spacing after the word (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added expectations for chromium-mac for delete-cell-contents-win.html Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/editing/FrameSelection.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/FrameSelection.cpp
diff --git a/Source/core/editing/FrameSelection.cpp b/Source/core/editing/FrameSelection.cpp
index 6faf68983d02ccd7ced1c604467e8d3fc4ecfae8..1f3886cad6838cc1951d33f845bf5297672e472d 100644
--- a/Source/core/editing/FrameSelection.cpp
+++ b/Source/core/editing/FrameSelection.cpp
@@ -577,6 +577,26 @@ VisiblePosition FrameSelection::endForPlatform() const
return positionForPlatform(false);
}
+VisiblePosition FrameSelection::nextWordPositionForPlatform(const VisiblePosition &originalPosition)
+{
+ VisiblePosition positionAfterCurrentWord = nextWordPosition(originalPosition);
+
+ if (m_frame && m_frame->editor()->behavior().shouldSkipSpaceWhenMovingRight()) {
+ // In order to skip spaces when moving right, we advance one
+ // word further and then move one word back. Given the
+ // semantics of previousWordPosition() this will put us at the
+ // beginning of the word following.
+ VisiblePosition positionAfterSpacingAndFollowingWord = nextWordPosition(positionAfterCurrentWord);
+ if (positionAfterSpacingAndFollowingWord.isNotNull() && positionAfterSpacingAndFollowingWord != positionAfterCurrentWord)
+ positionAfterCurrentWord = previousWordPosition(positionAfterSpacingAndFollowingWord);
+
+ bool movingBackwardsMovedPositionToStartOfCurrentWord = positionAfterCurrentWord == previousWordPosition(nextWordPosition(originalPosition));
+ if (movingBackwardsMovedPositionToStartOfCurrentWord)
+ positionAfterCurrentWord = positionAfterSpacingAndFollowingWord;
+ }
+ return positionAfterCurrentWord;
+}
+
#if ENABLE(USERSELECT_ALL)
static void adjustPositionForUserSelectAll(VisiblePosition& pos, bool isForward)
{
@@ -603,7 +623,7 @@ VisiblePosition FrameSelection::modifyExtendingRight(TextGranularity granularity
break;
case WordGranularity:
if (directionOfEnclosingBlock() == LTR)
- pos = nextWordPosition(pos);
+ pos = nextWordPositionForPlatform(pos);
else
pos = previousWordPosition(pos);
break;
@@ -637,7 +657,7 @@ VisiblePosition FrameSelection::modifyExtendingForward(TextGranularity granulari
pos = pos.next(CannotCrossEditingBoundary);
break;
case WordGranularity:
- pos = nextWordPosition(pos);
+ pos = nextWordPositionForPlatform(pos);
break;
case SentenceGranularity:
pos = nextSentencePosition(pos);
@@ -717,7 +737,7 @@ VisiblePosition FrameSelection::modifyMovingForward(TextGranularity granularity)
pos = VisiblePosition(m_selection.extent(), m_selection.affinity()).next(CannotCrossEditingBoundary);
break;
case WordGranularity:
- pos = nextWordPosition(VisiblePosition(m_selection.extent(), m_selection.affinity()));
+ pos = nextWordPositionForPlatform(VisiblePosition(m_selection.extent(), m_selection.affinity()));
break;
case SentenceGranularity:
pos = nextSentencePosition(VisiblePosition(m_selection.extent(), m_selection.affinity()));
@@ -773,7 +793,7 @@ VisiblePosition FrameSelection::modifyExtendingLeft(TextGranularity granularity)
if (directionOfEnclosingBlock() == LTR)
pos = previousWordPosition(pos);
else
- pos = nextWordPosition(pos);
+ pos = nextWordPositionForPlatform(pos);
break;
case LineBoundary:
if (directionOfEnclosingBlock() == LTR)
« no previous file with comments | « Source/core/editing/FrameSelection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698