diff options
| author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-03-12 14:11:15 +0100 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-03-12 14:11:15 +0100 |
| commit | dd91e772430dc294e3bf478c119ef8d43c0a3358 (patch) | |
| tree | 6f33ce4d5872a5691e0291eb45bf6ab373a5f567 /Source/WebCore/dom/TreeScope.cpp | |
| parent | ad0d549d4cc13433f77c1ac8f0ab379c83d93f28 (diff) | |
| download | qtwebkit-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.cpp | 34 |
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 |
