summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorLeon Scroggins <scroggo@google.com>2009-07-02 10:37:10 -0400
committerLeon Scroggins <scroggo@google.com>2009-07-06 11:15:07 -0400
commit4890feb048e4f0510c577babe3bfd08521a3996b (patch)
tree0f4373ae969e7ad68269d2abfc2b2093266fb94b /core
parentf8e3ba5bfad14f3037d72eb6243258c13169cbd8 (diff)
downloadframeworks_base-4890feb048e4f0510c577babe3bfd08521a3996b.zip
frameworks_base-4890feb048e4f0510c577babe3bfd08521a3996b.tar.gz
frameworks_base-4890feb048e4f0510c577babe3bfd08521a3996b.tar.bz2
In WebTextView, check the focus before sending a key.
This fixes a bug where the DOM has moved the focus, but the WebTextView is still sending keys to the old focus. Requires a change in external/webkit.
Diffstat (limited to 'core')
-rw-r--r--core/java/android/webkit/WebTextView.java36
-rw-r--r--core/java/android/webkit/WebView.java5
2 files changed, 25 insertions, 16 deletions
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index 25a20f2..23c7f7d 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -93,6 +93,28 @@ import java.util.ArrayList;
// Treat ACTION_DOWN and ACTION MULTIPLE the same
boolean down = event.getAction() != KeyEvent.ACTION_UP;
int keyCode = event.getKeyCode();
+
+ boolean isArrowKey = false;
+ switch(keyCode) {
+ case KeyEvent.KEYCODE_DPAD_LEFT:
+ case KeyEvent.KEYCODE_DPAD_RIGHT:
+ case KeyEvent.KEYCODE_DPAD_UP:
+ case KeyEvent.KEYCODE_DPAD_DOWN:
+ if (!mWebView.nativeCursorMatchesFocus()) {
+ return down ? mWebView.onKeyDown(keyCode, event) : mWebView
+ .onKeyUp(keyCode, event);
+
+ }
+ isArrowKey = true;
+ break;
+ }
+
+ if (!isArrowKey && mWebView.nativeFocusNodePointer() != mNodePointer) {
+ mWebView.nativeClearCursor();
+ remove();
+ return mWebView.dispatchKeyEvent(event);
+ }
+
Spannable text = (Spannable) getText();
int oldLength = text.length();
// Normally the delete key's dom events are sent via onTextChanged.
@@ -133,20 +155,6 @@ import java.util.ArrayList;
// Pass to super to handle longpress.
return super.dispatchKeyEvent(event);
}
- boolean isArrowKey = false;
- switch(keyCode) {
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_DOWN:
- if (!mWebView.nativeCursorMatchesFocus()) {
- return down ? mWebView.onKeyDown(keyCode, event) : mWebView
- .onKeyUp(keyCode, event);
-
- }
- isArrowKey = true;
- break;
- }
// Ensure there is a layout so arrow keys are handled properly.
if (getLayout() == null) {
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 8cc7989..57b9ac3 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -4904,8 +4904,8 @@ public class WebView extends AbsoluteLayout
// sure the text edit box is still on the screen.
if (inEditingMode() && nativeCursorIsTextInput()) {
mWebTextView.bringIntoView();
+ rebuildWebTextView();
}
- rebuildWebTextView();
break;
case CLEAR_TEXT_ENTRY:
clearTextEntry();
@@ -5395,7 +5395,7 @@ public class WebView extends AbsoluteLayout
nativeUpdateCachedTextfield(updatedText, mTextGeneration);
}
- private native void nativeClearCursor();
+ /* package */ native void nativeClearCursor();
private native void nativeCreate(int ptr);
private native int nativeCursorFramePointer();
private native Rect nativeCursorNodeBounds();
@@ -5432,6 +5432,7 @@ public class WebView extends AbsoluteLayout
/* package */ native int nativeFocusCandidatePointer();
private native String nativeFocusCandidateText();
private native int nativeFocusCandidateTextSize();
+ /* package */ native int nativeFocusNodePointer();
private native Rect nativeGetCursorRingBounds();
private native Region nativeGetSelection();
private native boolean nativeHasCursorNode();