summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCary Clark <cary@android.com>2009-12-02 08:59:01 -0500
committerCary Clark <cary@android.com>2009-12-02 09:16:52 -0500
commit960701032df6956d9fb640a26d315122f7b2c4be (patch)
treecc19ce8849d9f589627b09e650c4f5c878b3d90a
parentfb77ce99397e423500cc148c206ffe89796091fb (diff)
downloadexternal_webkit-960701032df6956d9fb640a26d315122f7b2c4be.zip
external_webkit-960701032df6956d9fb640a26d315122f7b2c4be.tar.gz
external_webkit-960701032df6956d9fb640a26d315122f7b2c4be.tar.bz2
nav to container if it wants key events
When a text field or text area (or plugin) has another navable element completely overlaying it, allow the trackball to move from that inner element to the outer one. Also, allow this to get a 'second chance' -- treat the case when one element overlays another as a spacial nav and allow it to retry in nav find algorithms. fixes http://b/2266756
-rw-r--r--WebKit/android/nav/CachedFrame.cpp10
-rw-r--r--WebKit/android/nav/CachedNode.h2
2 files changed, 6 insertions, 6 deletions
diff --git a/WebKit/android/nav/CachedFrame.cpp b/WebKit/android/nav/CachedFrame.cpp
index 54c295d..8a05cd6 100644
--- a/WebKit/android/nav/CachedFrame.cpp
+++ b/WebKit/android/nav/CachedFrame.cpp
@@ -753,7 +753,7 @@ int CachedFrame::frameNodeCommon(BestData& testData, const CachedNode* test, Bes
int CachedFrame::framePartCommon(BestData& testData,
const CachedNode* test, BestData* bestData, const CachedNode* cursor) const
{
- if (cursor && testData.mNodeBounds.contains(cursor->bounds())) {
+ if (cursor && testData.mNodeBounds.contains(cursor->bounds()) && !test->wantsKeyEvents()) {
testData.mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
return REJECT_TEST;
}
@@ -1144,7 +1144,7 @@ bool CachedFrame::BestData::setDownDirection(const CachedHistory* history)
int inNavBottom = navBounds.bottom() - mNodeBounds.bottom();
setNavInclusion(testRight - navBounds.right(), navBounds.x() - testX);
bool subsumes = navBounds.height() > 0 && inOrSubsumesNav();
- if (inNavTop <= 0 && inNavBottom <= 0 && subsumes) {
+ if (inNavTop <= 0 && inNavBottom <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
return REJECT_TEST;
}
@@ -1184,7 +1184,7 @@ bool CachedFrame::BestData::setLeftDirection(const CachedHistory* history)
int inNavLeft = mNodeBounds.x() - navBounds.x();
setNavInclusion(navBounds.y() - testY, testBottom - navBounds.bottom());
bool subsumes = navBounds.width() > 0 && inOrSubsumesNav();
- if (inNavLeft <= 0 && inNavRight <= 0 && subsumes) {
+ if (inNavLeft <= 0 && inNavRight <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
return REJECT_TEST;
}
@@ -1224,7 +1224,7 @@ bool CachedFrame::BestData::setRightDirection(const CachedHistory* history)
int inNavRight = navBounds.right() - mNodeBounds.right();
setNavInclusion(testBottom - navBounds.bottom(), navBounds.y() - testY);
bool subsumes = navBounds.width() > 0 && inOrSubsumesNav();
- if (inNavLeft <= 0 && inNavRight <= 0 && subsumes) {
+ if (inNavLeft <= 0 && inNavRight <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
return REJECT_TEST;
}
@@ -1264,7 +1264,7 @@ bool CachedFrame::BestData::setUpDirection(const CachedHistory* history)
int inNavTop = mNodeBounds.y() - navBounds.y();
setNavInclusion(navBounds.x() - testX, testRight - navBounds.right());
bool subsumes = navBounds.height() > 0 && inOrSubsumesNav();
- if (inNavTop <= 0 && inNavBottom <= 0 && subsumes) {
+ if (inNavTop <= 0 && inNavBottom <= 0 && subsumes && !mNode->wantsKeyEvents()) {
mNode->setCondition(CachedNode::NOT_ENCLOSING_CURSOR);
return REJECT_TEST;
}
diff --git a/WebKit/android/nav/CachedNode.h b/WebKit/android/nav/CachedNode.h
index 7374080..bfc2107 100644
--- a/WebKit/android/nav/CachedNode.h
+++ b/WebKit/android/nav/CachedNode.h
@@ -62,6 +62,7 @@ public:
IN_UMBRA,
IN_WORKING,
LEFTMOST,
+ NOT_ENCLOSING_CURSOR,
OVERLAP_OR_EDGE_FURTHER,
PREFERRED, // better overlap measure
SECOND_CHANCE_END = PREFERRED, // must be last in list
@@ -73,7 +74,6 @@ public:
HIGHER_TAB_INDEX,
IN_CURSOR,
IN_CURSOR_CHILDREN,
- NOT_ENCLOSING_CURSOR,
NOT_CURSOR_NODE,
OUTSIDE_OF_BEST, // containership
OUTSIDE_OF_ORIGINAL, // containership