From 19436561c60b5a66e7326ac4523841cd7a74351e Mon Sep 17 00:00:00 2001 From: Cary Clark Date: Thu, 4 Jun 2009 16:25:07 -0400 Subject: [PATCH] send click in browser when key is sent to unfocused text field Also, set focusControllerActive state based on presence of focus and cursor that wants key events. Disable focusControllerActive when moved cursor wants key events. Remove unused recompute-focus code. --- core/java/android/webkit/WebView.java | 25 ++++++++++++----------- core/java/android/webkit/WebViewCore.java | 8 -------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index ef2d4e82f697e..c56283156b876 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -447,7 +447,6 @@ public class WebView extends AbsoluteLayout static final int WEBCORE_INITIALIZED_MSG_ID = 16; static final int UPDATE_TEXTFIELD_TEXT_MSG_ID = 17; static final int DID_FIRST_LAYOUT_MSG_ID = 18; - static final int RECOMPUTE_FOCUS_MSG_ID = 19; static final int MARK_NODE_INVALID_ID = 21; static final int UPDATE_CLIPBOARD = 22; @@ -476,7 +475,7 @@ public class WebView extends AbsoluteLayout "WEBCORE_INITIALIZED_MSG_ID", // = 16; "UPDATE_TEXTFIELD_TEXT_MSG_ID", // = 17; "DID_FIRST_LAYOUT_MSG_ID", // = 18; - "RECOMPUTE_FOCUS_MSG_ID", // = 19; + "19", "20", "MARK_NODE_INVALID_ID", // = 21; "UPDATE_CLIPBOARD", // = 22; @@ -2400,7 +2399,6 @@ public class WebView extends AbsoluteLayout if (mTouchMode >= FIRST_SCROLL_ZOOM && mTouchMode <= LAST_SCROLL_ZOOM) { scrollZoomDraw(canvas); } else { - nativeRecomputeFocus(); // Update the buttons in the picture, so when we draw the picture // to the screen, they are in the correct state. // Tell the native side if user is a) touching the screen, @@ -3211,8 +3209,13 @@ public class WebView extends AbsoluteLayout } } + if (nativeCursorWantsKeyEvents() && !nativeCursorMatchesFocus()) { + mWebViewCore.sendMessage(EventHub.CLICK); + } + // TODO: should we pass all the keys to DOM or check the meta tag if (nativeCursorWantsKeyEvents() || true) { + mWebViewCore.sendMessage(EventHub.SET_ACTIVE, 1); // pass the key to DOM mWebViewCore.sendMessage(EventHub.KEY_DOWN, event); // return true as DOM handles the key @@ -3443,9 +3446,10 @@ public class WebView extends AbsoluteLayout * FocusController is "active" so that it will draw the blinking cursor. */ private void setFocusControllerActive(boolean active) { - if (mWebViewCore != null) { - mWebViewCore.sendMessage(EventHub.SET_ACTIVE, active ? 1 : 0, 0); - } + if (mWebViewCore == null) return; + active &= nativeCursorMatchesFocus() || !nativeHasFocusNode() + || !nativeCursorWantsKeyEvents(); + mWebViewCore.sendMessage(EventHub.SET_ACTIVE, active ? 1 : 0, 0); } @Override @@ -4771,11 +4775,6 @@ public class WebView extends AbsoluteLayout } rebuildWebTextView(); break; - case RECOMPUTE_FOCUS_MSG_ID: - if (mNativeClass != 0) { - nativeRecomputeFocus(); - } - break; case INVAL_RECT_MSG_ID: { Rect r = (Rect)msg.obj; if (r == null) { @@ -5099,6 +5098,9 @@ public class WebView extends AbsoluteLayout // called by JNI private void sendMoveMouseIfLatest() { + if (!nativeCursorMatchesFocus() && nativeCursorWantsKeyEvents()) { + setFocusControllerActive(false); + } mWebViewCore.sendMessage(EventHub.SET_MOVE_MOUSE_IF_LATEST, cursorData()); } @@ -5281,7 +5283,6 @@ public class WebView extends AbsoluteLayout private native int nativeMoveGeneration(); private native void nativeMoveSelection(int x, int y, boolean extendSelection); - private native void nativeRecomputeFocus(); // Like many other of our native methods, you must make sure that // mNativeClass is not null before calling this method. private native void nativeRecordButtons(boolean focused, diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index b0c626f527830..b0747f58cd886 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -1561,14 +1561,6 @@ final class WebViewCore { contentDraw(); } - // called by JNI - private void sendRecomputeFocus() { - if (mWebView != null) { - Message.obtain(mWebView.mPrivateHandler, - WebView.RECOMPUTE_FOCUS_MSG_ID).sendToTarget(); - } - } - /* Called by JNI. The coordinates are in doc coordinates, so they need to be scaled before they can be used by the view system, which happens in WebView since it (and its thread) know the current scale factor.