diff options
-rw-r--r-- | core/java/android/webkit/WebTextView.java | 9 | ||||
-rw-r--r-- | core/java/android/webkit/WebView.java | 8 |
2 files changed, 12 insertions, 5 deletions
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java index f479124..e0d41c2 100644 --- a/core/java/android/webkit/WebTextView.java +++ b/core/java/android/webkit/WebTextView.java @@ -87,11 +87,12 @@ import java.util.ArrayList; // Gets set to true when the the IME jumps to the next textfield. When this // happens, the next time the user hits a key it is okay for the focus // pointer to not match the WebTextView's node pointer - private boolean mOkayForFocusNotToMatch; + boolean mOkayForFocusNotToMatch; // Whether or not a selection change was generated from webkit. If it was, // we do not need to pass the selection back to webkit. private boolean mFromWebKit; private boolean mGotTouchDown; + private boolean mInSetTextAndKeepSelection; // Array to store the final character added in onTextChanged, so that its // KeyEvents may be determined. private char[] mCharacter = new char[1]; @@ -395,7 +396,9 @@ import java.util.ArrayList; Log.v(LOGTAG, "onTextChanged start=" + start + " start + before=" + (start + before)); } - mWebView.setSelection(start, start + before); + if (!mInSetTextAndKeepSelection) { + mWebView.setSelection(start, start + before); + } } if (!cannotUseKeyEvents) { int length = events.length; @@ -791,7 +794,9 @@ import java.util.ArrayList; /* package */ void setTextAndKeepSelection(String text) { mPreChange = text.toString(); Editable edit = (Editable) getText(); + mInSetTextAndKeepSelection = true; edit.replace(0, edit.length(), text); + mInSetTextAndKeepSelection = false; updateCachedTextfield(); } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 68a9a92..50358c2 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -4804,9 +4804,11 @@ public class WebView extends AbsoluteLayout /* package */ void passToJavaScript(String currentText, KeyEvent event) { if (nativeCursorWantsKeyEvents() && !nativeCursorMatchesFocus()) { mWebViewCore.sendMessage(EventHub.CLICK); - int select = nativeFocusCandidateIsTextField() ? - nativeFocusCandidateMaxLength() : 0; - setSelection(select, select); + if (mWebTextView.mOkayForFocusNotToMatch) { + int select = nativeFocusCandidateIsTextField() ? + nativeFocusCandidateMaxLength() : 0; + setSelection(select, select); + } } WebViewCore.JSKeyData arg = new WebViewCore.JSKeyData(); arg.mEvent = event; |