summaryrefslogtreecommitdiffstats
path: root/WebKit/android
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/android')
-rw-r--r--WebKit/android/jni/WebViewCore.cpp27
-rw-r--r--WebKit/android/nav/WebView.cpp22
2 files changed, 34 insertions, 15 deletions
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index 685b41f..7ae2210 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -1432,6 +1432,7 @@ void WebViewCore::replaceTextfieldText(int oldStart,
WebCore::TypingCommand::insertText(focus->document(), replace,
false);
setSelection(start, end);
+ setFocusControllerActive(true);
}
void WebViewCore::passToJs(
@@ -1460,6 +1461,7 @@ void WebViewCore::passToJs(
WebCore::RenderObject* renderer = focus->renderer();
if (!renderer || (!renderer->isTextField() && !renderer->isTextArea()))
return;
+ setFocusControllerActive(true);
WebCore::RenderTextControl* renderText =
static_cast<WebCore::RenderTextControl*>(renderer);
WebCore::String test = renderText->text();
@@ -1666,6 +1668,7 @@ bool WebViewCore::key(int keyCode, UChar32 unichar, int repeatCount, bool isShif
return eventHandler->keyEvent(evt);
}
+// For when the user clicks the trackball
bool WebViewCore::click() {
bool keyHandled = false;
WebCore::IntPoint pt = m_mousePos;
@@ -1674,9 +1677,7 @@ bool WebViewCore::click() {
hitTestResultAtPoint(pt, false);
WebCore::Node* focusNode = hitTestResult.innerNode();
if (focusNode) {
- WebFrame::getWebFrame(m_mainFrame)->setUserInitiatedClick(true);
keyHandled = handleMouseClick(focusNode->document()->frame(), focusNode);
- WebFrame::getWebFrame(m_mainFrame)->setUserInitiatedClick(false);
}
return keyHandled;
}
@@ -1730,6 +1731,7 @@ void WebViewCore::touchUp(int touchGeneration,
client->setFromClick(false);
}
+// Common code for both clicking with the trackball and touchUp
bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* nodePtr)
{
bool valid = framePtr == NULL
@@ -1787,6 +1789,15 @@ bool WebViewCore::handleMouseClick(WebCore::Frame* framePtr, WebCore::Node* node
WTF::currentTime());
bool handled = framePtr->eventHandler()->handleMouseReleaseEvent(mouseUp);
webFrame->setUserInitiatedClick(false);
+
+ // If the user clicked on a textfield, make the focusController active
+ // so we show the blinking cursor.
+ WebCore::Node* focusNode = currentFocus();
+ if (focusNode) {
+ WebCore::RenderObject* renderer = focusNode->renderer();
+ if (renderer && (renderer->isTextField() || renderer->isTextArea()))
+ setFocusControllerActive(true);
+ }
return handled;
}
@@ -2097,15 +2108,15 @@ static void PassToJs(JNIEnv *env, jobject obj,
generation, current, keyCode, keyValue, down, cap, fn, sym);
}
-static void SetFocusControllerActive(JNIEnv *env, jobject obj, jboolean active)
+static void SetFocusControllerInactive(JNIEnv *env, jobject obj)
{
#ifdef ANDROID_INSTRUMENT
TimeCounterAuto counter(TimeCounter::WebViewCoreTimeCounter);
#endif
- LOGV("webviewcore::nativeSetFocusControllerActive()\n");
+ LOGV("webviewcore::nativeSetFocusControllerInactive()\n");
WebViewCore* viewImpl = GET_NATIVE_VIEW(env, obj);
- LOG_ASSERT(viewImpl, "viewImpl not set in nativeSetFocusControllerActive");
- viewImpl->setFocusControllerActive(active);
+ LOG_ASSERT(viewImpl, "viewImpl not set in nativeSetFocusControllerInactive");
+ viewImpl->setFocusControllerActive(false);
}
static void SaveDocumentState(JNIEnv *env, jobject obj, jint frame)
@@ -2507,8 +2518,8 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
(void*) MoveMouseIfLatest },
{ "passToJs", "(ILjava/lang/String;IIZZZZ)V",
(void*) PassToJs } ,
- { "nativeSetFocusControllerActive", "(Z)V",
- (void*) SetFocusControllerActive },
+ { "nativeSetFocusControllerInactive", "()V",
+ (void*) SetFocusControllerInactive },
{ "nativeSaveDocumentState", "(I)V",
(void*) SaveDocumentState },
{ "nativeFindAddress", "(Ljava/lang/String;)Ljava/lang/String;",
diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp
index 22b07bc..8df6e23 100644
--- a/WebKit/android/nav/WebView.cpp
+++ b/WebKit/android/nav/WebView.cpp
@@ -128,7 +128,7 @@ WebView(JNIEnv* env, jobject javaWebView, int viewImpl)
m_javaGlue.m_clearTextEntry = GetJMethod(env, clazz, "clearTextEntry", "()V");
m_javaGlue.m_overrideLoading = GetJMethod(env, clazz, "overrideLoading", "(Ljava/lang/String;)V");
m_javaGlue.m_sendMoveMouse = GetJMethod(env, clazz, "sendMoveMouse", "(IIII)V");
- m_javaGlue.m_sendMoveMouseIfLatest = GetJMethod(env, clazz, "sendMoveMouseIfLatest", "()V");
+ m_javaGlue.m_sendMoveMouseIfLatest = GetJMethod(env, clazz, "sendMoveMouseIfLatest", "(Z)V");
m_javaGlue.m_sendMotionUp = GetJMethod(env, clazz, "sendMotionUp", "(IIIIII)V");
m_javaGlue.m_getScaledMaxXScroll = GetJMethod(env, clazz, "getScaledMaxXScroll", "()I");
m_javaGlue.m_getScaledMaxYScroll = GetJMethod(env, clazz, "getScaledMaxYScroll", "()I");
@@ -710,8 +710,11 @@ bool moveCursor(int keyCode, int count, bool ignoreScroll)
}
bool result = false;
if (cachedNode) {
- root->setCursor((CachedFrame*) cachedFrame, (CachedNode*) cachedNode);
- sendMoveMouseIfLatest();
+ root->setCursor(const_cast<CachedFrame*>(cachedFrame),
+ const_cast<CachedNode*>(cachedNode));
+ bool disableFocusController = cachedNode != root->currentFocus()
+ && cachedNode->wantsKeyEvents();
+ sendMoveMouseIfLatest(disableFocusController);
viewInvalidate();
} else {
int docHeight = root->documentHeight();
@@ -763,18 +766,23 @@ void selectBestAt(const WebCore::IntRect& rect)
{
const CachedFrame* frame;
int rx, ry;
+ bool disableFocusController = false;
CachedRoot* root = getFrameCache(DontAllowNewer);
const CachedNode* node = findAt(root, rect, &frame, &rx, &ry);
if (!node) {
DBG_NAV_LOGD("no nodes found root=%p", root);
+ disableFocusController = true;
if (root)
root->setCursor(0, 0);
} else {
DBG_NAV_LOGD("CachedNode:%p (%d)", node, node->index());
root->setCursor(const_cast<CachedFrame*>(frame),
- const_cast<CachedNode*>(node));
+ const_cast<CachedNode*>(node));
+ if (!node->wantsKeyEvents()) {
+ disableFocusController = true;
+ }
}
- sendMoveMouseIfLatest();
+ sendMoveMouseIfLatest(disableFocusController);
viewInvalidate();
}
@@ -1014,12 +1022,12 @@ void sendMoveMouse(WebCore::Frame* framePtr, WebCore::Node* nodePtr, int x, int
checkException(env);
}
-void sendMoveMouseIfLatest()
+void sendMoveMouseIfLatest(bool disableFocusController)
{
LOG_ASSERT(m_javaGlue.m_obj, "A java object was not associated with this native WebView!");
JNIEnv* env = JSC::Bindings::getJNIEnv();
env->CallVoidMethod(m_javaGlue.object(env).get(),
- m_javaGlue.m_sendMoveMouseIfLatest);
+ m_javaGlue.m_sendMoveMouseIfLatest, disableFocusController);
checkException(env);
}