summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/TreeScope.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-03-12 14:11:15 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-03-12 14:11:15 +0100
commitdd91e772430dc294e3bf478c119ef8d43c0a3358 (patch)
tree6f33ce4d5872a5691e0291eb45bf6ab373a5f567 /Source/WebCore/dom/TreeScope.cpp
parentad0d549d4cc13433f77c1ac8f0ab379c83d93f28 (diff)
downloadqtwebkit-dd91e772430dc294e3bf478c119ef8d43c0a3358.tar.gz
Imported WebKit commit 3db4eb1820ac8fb03065d7ea73a4d9db1e8fea1a (http://svn.webkit.org/repository/webkit/trunk@110422)
This includes build fixes for the latest qtbase/qtdeclarative as well as the final QML2 API.
Diffstat (limited to 'Source/WebCore/dom/TreeScope.cpp')
-rw-r--r--Source/WebCore/dom/TreeScope.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/Source/WebCore/dom/TreeScope.cpp b/Source/WebCore/dom/TreeScope.cpp
index 71384462e..a75bd24ee 100644
--- a/Source/WebCore/dom/TreeScope.cpp
+++ b/Source/WebCore/dom/TreeScope.cpp
@@ -29,9 +29,13 @@
#include "ContainerNode.h"
#include "Document.h"
#include "Element.h"
+#include "FocusController.h"
+#include "Frame.h"
#include "HTMLAnchorElement.h"
+#include "HTMLFrameOwnerElement.h"
#include "HTMLMapElement.h"
#include "HTMLNames.h"
+#include "Page.h"
#include "TreeScopeAdopter.h"
#include <wtf/text/AtomicString.h>
#include <wtf/text/CString.h>
@@ -151,5 +155,35 @@ void TreeScope::adoptIfNeeded(Node* node)
adopter.execute();
}
+static Node* focusedFrameOwnerElement(Frame* focusedFrame, Frame* currentFrame)
+{
+ for (; focusedFrame; focusedFrame = focusedFrame->tree()->parent()) {
+ if (focusedFrame->tree()->parent() == currentFrame)
+ return focusedFrame->ownerElement();
+ }
+ return 0;
+}
+
+Element* TreeScope::activeElement()
+{
+ Document* document = rootNode()->document();
+ Node* node = document->focusedNode();
+ if (!node && document->page())
+ node = focusedFrameOwnerElement(document->page()->focusController()->focusedFrame(), document->frame());
+ if (!node)
+ return document->body();
+
+ TreeScope* treeScope = node->treeScope();
+
+ while (treeScope != this && treeScope != document) {
+ node = treeScope->rootNode()->shadowHost();
+ treeScope = node->treeScope();
+ }
+
+ if (node->isElementNode())
+ return toElement(node);
+ return 0;
+}
+
} // namespace WebCore