summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android/jni/WebViewCore.cpp
diff options
context:
space:
mode:
authorGeorge Mount <mount@google.com>2012-06-06 16:24:00 -0700
committerGeorge Mount <mount@google.com>2012-06-06 16:40:22 -0700
commit2f25be4556024e8272a7a22e5b9a5c9b2caf2d65 (patch)
tree55e12c3555b1db4ec96e49ebb8e9b344ab7d57f5 /Source/WebKit/android/jni/WebViewCore.cpp
parentd8befe2b1e15efadbcea9e46a91e1bf4e5519d98 (diff)
downloadexternal_webkit-2f25be4556024e8272a7a22e5b9a5c9b2caf2d65.zip
external_webkit-2f25be4556024e8272a7a22e5b9a5c9b2caf2d65.tar.gz
external_webkit-2f25be4556024e8272a7a22e5b9a5c9b2caf2d65.tar.bz2
Fix edit text capturing selection.
Bug 6623128 Change-Id: Ia7a9f4bdf9478c8e1e8acb0e9f6e08d779185d11
Diffstat (limited to 'Source/WebKit/android/jni/WebViewCore.cpp')
-rw-r--r--Source/WebKit/android/jni/WebViewCore.cpp42
1 files changed, 21 insertions, 21 deletions
diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp
index c0766e4..feb8ab4 100644
--- a/Source/WebKit/android/jni/WebViewCore.cpp
+++ b/Source/WebKit/android/jni/WebViewCore.cpp
@@ -1707,25 +1707,25 @@ IntPoint WebViewCore::convertGlobalContentToFrameContent(const IntPoint& point,
return IntPoint(point.x() + frameOffset.x(), point.y() + frameOffset.y());
}
-Position WebViewCore::trimSelectionPosition(const Position &start, const Position& stop)
+VisiblePosition WebViewCore::trimSelectionPosition(const VisiblePosition &start,
+ const VisiblePosition& stop)
{
int direction = comparePositions(start, stop);
if (direction == 0)
return start;
bool forward = direction < 0;
- EAffinity affinity = forward ? DOWNSTREAM : UPSTREAM;
bool move;
- Position pos = start;
+ VisiblePosition pos = start;
bool movedTooFar = false;
do {
move = true;
- Node* node = pos.anchorNode();
+ Node* node = pos.deepEquivalent().anchorNode();
if (node && node->isTextNode() && node->renderer()) {
RenderText *textRenderer = toRenderText(node->renderer());
move = !textRenderer->textLength();
}
if (move) {
- Position nextPos = forward ? pos.next() : pos.previous();
+ VisiblePosition nextPos = forward ? pos.next() : pos.previous();
movedTooFar = nextPos.isNull() || pos == nextPos
|| ((comparePositions(nextPos, stop) < 0) != forward);
pos = nextPos;
@@ -1761,37 +1761,37 @@ void WebViewCore::selectText(SelectText::HandleId handleId, int x, int y)
bool draggingStart = (baseIsStart == draggingBase);
if (draggingStart) {
- startPosition = endPosition.honorEditableBoundaryAtOrAfter(startPosition);
- if (startPosition.isNull())
- return;
- if (selection.isCaret())
- start = end = startPosition.deepEquivalent();
- else {
+ if (selection.isRange()) {
+ startPosition = trimSelectionPosition(startPosition, endPosition);
if ((startPosition != endPosition) && isEndOfBlock(startPosition)) {
// Ensure startPosition is not at end of block
VisiblePosition nextStartPosition(startPosition.next());
if (nextStartPosition.isNotNull())
startPosition = nextStartPosition;
}
- start = startPosition.deepEquivalent();
- start = trimSelectionPosition(start, end);
}
- } else {
- endPosition = startPosition.honorEditableBoundaryAtOrAfter(endPosition);
- if (endPosition.isNull())
+ startPosition = endPosition.honorEditableBoundaryAtOrAfter(startPosition);
+ if (startPosition.isNull())
return;
+ start = startPosition.deepEquivalent();
if (selection.isCaret())
- start = end = endPosition.deepEquivalent();
- else {
- if ((startPosition != endPosition) && isStartOfBlock(endPosition)) {
+ end = start;
+ } else {
+ if (selection.isRange()) {
+ endPosition = trimSelectionPosition(endPosition, startPosition);
+ if ((start != end) && isStartOfBlock(endPosition)) {
// Ensure endPosition is not at start of block
VisiblePosition prevEndPosition(endPosition.previous());
if (!prevEndPosition.isNull())
endPosition = prevEndPosition;
}
- end = endPosition.deepEquivalent();
- end = trimSelectionPosition(end, start);
}
+ endPosition = startPosition.honorEditableBoundaryAtOrAfter(endPosition);
+ if (endPosition.isNull())
+ return;
+ end = endPosition.deepEquivalent();
+ if (selection.isCaret())
+ start = end;
}
selection = VisibleSelection(base, extent);