diff options
| author | 2012-03-21 10:29:08 -0700 | |
|---|---|---|
| committer | 2012-03-21 10:29:08 -0700 | |
| commit | f3616da6a8f5576c99a0cf1884f2c6be758f63f7 (patch) | |
| tree | 1c02379fb5787fe10158a6b607976607dcc6c08c | |
| parent | ceb0909bc2c9427f4b5a2c8cad219cdb73577956 (diff) | |
| parent | f796fdfe6d5ebc4f22b5cb167f866c7a74d71260 (diff) | |
Merge "Make paste window and caret handle show up at the right time."
| -rw-r--r-- | core/java/android/webkit/WebViewClassic.java | 43 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 7 |
2 files changed, 36 insertions, 14 deletions
diff --git a/core/java/android/webkit/WebViewClassic.java b/core/java/android/webkit/WebViewClassic.java index 13a2c94e7832..aa4de2e125ce 100644 --- a/core/java/android/webkit/WebViewClassic.java +++ b/core/java/android/webkit/WebViewClassic.java @@ -1255,6 +1255,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc static final int AUTOFILL_FORM = 148; static final int ANIMATE_TEXT_SCROLL = 149; static final int EDIT_TEXT_SIZE_CHANGED = 150; + static final int SHOW_CARET_HANDLE = 151; private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID; private static final int LAST_PACKAGE_MSG_ID = HIT_TEST_RESULT; @@ -5468,9 +5469,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc private boolean setupWebkitSelect() { syncSelectionCursors(); - if (mIsCaretSelection) { - showPasteWindow(); - } else if (!startSelectActionMode()) { + if (!mIsCaretSelection && !startSelectActionMode()) { selectionDone(); return false; } @@ -5539,7 +5538,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc if (!mIsCaretSelection) { updateWebkitSelection(); } - mIsCaretSelection = false; invalidate(); // redraw without selection mAutoScrollX = 0; mAutoScrollY = 0; @@ -6378,8 +6376,15 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc case MotionEvent.ACTION_UP: { mGestureDetector.onTouchEvent(ev); if (mTouchInEditText && mConfirmMove) { + stopTouch(); break; // We've been scrolling the edit text. } + if (!mConfirmMove && mIsEditingText && mSelectionStarted && + mIsCaretSelection) { + showPasteWindow(); + stopTouch(); + break; + } // pass the touch events from UI thread to WebCore thread if (shouldForwardTouchEvent()) { TouchEventData ted = new TouchEventData(); @@ -6765,7 +6770,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc syncSelectionCursors(); if (mIsCaretSelection) { resetCaretTimer(); - showPasteWindow(); } invalidate(); } @@ -8524,6 +8528,14 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc } break; + case SHOW_CARET_HANDLE: + if (!mSelectingText && mIsEditingText && mIsCaretSelection) { + setupWebkitSelect(); + resetCaretTimer(); + showPasteWindow(); + } + break; + default: super.handleMessage(msg); break; @@ -8823,13 +8835,20 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc (data.mStart != data.mEnd || (mFieldPointer == nodePointer && mFieldPointer != 0))) { mIsCaretSelection = (data.mStart == data.mEnd); - if (!mSelectingText) { - setupWebkitSelect(); - } else if (!mSelectionStarted) { - syncSelectionCursors(); - } - if (mIsCaretSelection) { - resetCaretTimer(); + if (mIsCaretSelection && + (mInputConnection == null || + mInputConnection.getEditable().length() == 0)) { + // There's no text, don't show caret handle. + selectionDone(); + } else { + if (!mSelectingText) { + setupWebkitSelect(); + } else if (!mSelectionStarted) { + syncSelectionCursors(); + } + if (mIsCaretSelection) { + resetCaretTimer(); + } } } else { selectionDone(); diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index a36ce06988eb..1efa4e34ca39 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -1778,7 +1778,10 @@ public final class WebViewCore { case SELECT_WORD_AT: { int x = msg.arg1; int y = msg.arg2; - nativeSelectWordAt(mNativeClass, x, y); + if (!nativeSelectWordAt(mNativeClass, x, y)) { + mWebView.mPrivateHandler.obtainMessage(WebViewClassic.SHOW_CARET_HANDLE) + .sendToTarget(); + } break; } case SELECT_ALL: @@ -3120,7 +3123,7 @@ public final class WebViewCore { private native void nativeSelectText(int nativeClass, int startX, int startY, int endX, int endY); private native void nativeClearTextSelection(int nativeClass); - private native void nativeSelectWordAt(int nativeClass, int x, int y); + private native boolean nativeSelectWordAt(int nativeClass, int x, int y); private native void nativeSelectAll(int nativeClass); private static native void nativeCertTrustChanged(); |