Title: [150712] trunk/Source
Revision
150712
Author
[email protected]
Date
2013-05-26 04:39:01 -0700 (Sun, 26 May 2013)

Log Message

FocusController::setFocusedNode() should be setFocusedElement().
<http://webkit.org/b/116780>

Reviewed by Antti Koivisto.

Source/WebCore:

Only Elements can have focus, so make the public API of FocusController take Element*.

* WebCore.exp.in:
* page/FocusController.h:
* page/FocusController.cpp:
(WebCore::FocusController::setFocusedElement):

    Out with the setFocusedNode(), in with the setFocusedElement().

* dom/Element.cpp:
(WebCore::Element::focus):
(WebCore::Element::blur):
* page/EventHandler.cpp:
(WebCore::EventHandler::dispatchMouseEvent):
* plugins/PluginView.cpp:
(WebCore::PluginView::focusPluginElement):
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::setFocusedNodeIfNeeded):

    Tweak for FocusController taking Element* instead of Node*.

(WebCore::FrameSelection::setFocusedElementIfNeeded):

    Renamed from setFocusedNodeIfNeeded().

* editing/htmlediting.h:
* editing/htmlediting.cpp:
(WebCore::enclosingAnchorElement):

    Cleaned up the loop for readability and made it return an Element.

Source/WebKit/blackberry:

* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPagePrivate::clearFocusNode):
(BlackBerry::WebKit::WebPage::setNodeFocus):
* WebKitSupport/SelectionHandler.cpp:
(BlackBerry::WebKit::SelectionHandler::selectObject):

Source/WebKit/win:

* WebView.cpp:
(WebView::clearFocusNode):

Source/WebKit2:

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::focusPluginElement):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (150711 => 150712)


--- trunk/Source/WebCore/ChangeLog	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/ChangeLog	2013-05-26 11:39:01 UTC (rev 150712)
@@ -1,5 +1,43 @@
 2013-05-26  Andreas Kling  <[email protected]>
 
+        FocusController::setFocusedNode() should be setFocusedElement().
+        <http://webkit.org/b/116780>
+
+        Reviewed by Antti Koivisto.
+
+        Only Elements can have focus, so make the public API of FocusController take Element*.
+
+        * WebCore.exp.in:
+        * page/FocusController.h:
+        * page/FocusController.cpp:
+        (WebCore::FocusController::setFocusedElement):
+
+            Out with the setFocusedNode(), in with the setFocusedElement().
+
+        * dom/Element.cpp:
+        (WebCore::Element::focus):
+        (WebCore::Element::blur):
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::dispatchMouseEvent):
+        * plugins/PluginView.cpp:
+        (WebCore::PluginView::focusPluginElement):
+        * editing/FrameSelection.cpp:
+        (WebCore::FrameSelection::setFocusedNodeIfNeeded):
+
+            Tweak for FocusController taking Element* instead of Node*.
+
+        (WebCore::FrameSelection::setFocusedElementIfNeeded):
+
+            Renamed from setFocusedNodeIfNeeded().
+
+        * editing/htmlediting.h:
+        * editing/htmlediting.cpp:
+        (WebCore::enclosingAnchorElement):
+
+            Cleaned up the loop for readability and made it return an Element.
+
+2013-05-26  Andreas Kling  <[email protected]>
+
         Move some form control things from Element to HTMLFormControlElement.
         <http://webkit.org/b/116779>
 

Modified: trunk/Source/WebCore/WebCore.exp.in (150711 => 150712)


--- trunk/Source/WebCore/WebCore.exp.in	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/WebCore.exp.in	2013-05-26 11:39:01 UTC (rev 150712)
@@ -432,7 +432,7 @@
 __ZN7WebCore15DatabaseManager8setQuotaEPNS_14SecurityOriginEy
 __ZN7WebCore15DatabaseManager9setClientEPNS_21DatabaseManagerClientE
 __ZN7WebCore15FocusController10setFocusedEb
-__ZN7WebCore15FocusController14setFocusedNodeEPNS_4NodeEN3WTF10PassRefPtrINS_5FrameEEENS_14FocusDirectionE
+__ZN7WebCore15FocusController17setFocusedElementEPNS_7ElementEN3WTF10PassRefPtrINS_5FrameEEENS_14FocusDirectionE
 __ZN7WebCore15FocusController15setFocusedFrameEN3WTF10PassRefPtrINS_5FrameEEE
 __ZN7WebCore15FocusController15setInitialFocusENS_14FocusDirectionEPNS_13KeyboardEventE
 __ZN7WebCore15FocusController28setContainingWindowIsVisibleEb

Modified: trunk/Source/WebCore/dom/Element.cpp (150711 => 150712)


--- trunk/Source/WebCore/dom/Element.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/dom/Element.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -2034,7 +2034,7 @@
         // If a focus event handler changes the focus to a different node it
         // does not make sense to continue and update appearence.
         protect = this;
-        if (!page->focusController()->setFocusedNode(this, doc->frame(), direction))
+        if (!page->focusController()->setFocusedElement(this, doc->frame(), direction))
             return;
     }
 
@@ -2078,7 +2078,7 @@
     Document* doc = document();
     if (treeScope()->focusedNode() == this) {
         if (doc->frame())
-            doc->frame()->page()->focusController()->setFocusedNode(0, doc->frame());
+            doc->frame()->page()->focusController()->setFocusedElement(0, doc->frame());
         else
             doc->setFocusedNode(0);
     }

Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (150711 => 150712)


--- trunk/Source/WebCore/editing/FrameSelection.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -311,7 +311,7 @@
     setCaretRectNeedsUpdate();
     
     if (!s.isNone() && !(options & DoNotSetFocus))
-        setFocusedNodeIfNeeded();
+        setFocusedElementIfNeeded();
 
     if (!(options & DoNotUpdateAppearance)) {
 #if ENABLE(TEXT_CARET)
@@ -1876,15 +1876,15 @@
     return widget && widget->isFrameView();
 }
 
-void FrameSelection::setFocusedNodeIfNeeded()
+void FrameSelection::setFocusedElementIfNeeded()
 {
     if (isNone() || !isFocused())
         return;
 
     bool caretBrowsing = m_frame->settings() && m_frame->settings()->caretBrowsingEnabled();
     if (caretBrowsing) {
-        if (Node* anchor = enclosingAnchorElement(base())) {
-            m_frame->page()->focusController()->setFocusedNode(anchor, m_frame);
+        if (Element* anchor = enclosingAnchorElement(base())) {
+            m_frame->page()->focusController()->setFocusedElement(anchor, m_frame);
             return;
         }
     }
@@ -1896,7 +1896,7 @@
             // so add the !isFrameElement check here. There's probably a better way to make this
             // work in the long term, but this is the safest fix at this time.
             if (target->isMouseFocusable() && !isFrameElement(target)) {
-                m_frame->page()->focusController()->setFocusedNode(target, m_frame);
+                m_frame->page()->focusController()->setFocusedElement(target, m_frame);
                 return;
             }
             target = target->parentOrShadowHostElement();
@@ -1905,7 +1905,7 @@
     }
 
     if (caretBrowsing)
-        m_frame->page()->focusController()->setFocusedNode(0, m_frame);
+        m_frame->page()->focusController()->setFocusedElement(0, m_frame);
 }
 
 void DragCaretController::paintDragCaret(Frame* frame, GraphicsContext* p, const LayoutPoint& paintOffset, const LayoutRect& clipRect) const

Modified: trunk/Source/WebCore/editing/FrameSelection.h (150711 => 150712)


--- trunk/Source/WebCore/editing/FrameSelection.h	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/editing/FrameSelection.h	2013-05-26 11:39:01 UTC (rev 150712)
@@ -236,7 +236,6 @@
     bool shouldDeleteSelection(const VisibleSelection&) const;
     enum EndPointsAdjustmentMode { AdjustEndpointsAtBidiBoundary, DoNotAdjsutEndpoints };
     void setNonDirectionalSelectionIfNeeded(const VisibleSelection&, TextGranularity, EndPointsAdjustmentMode = DoNotAdjsutEndpoints);
-    void setFocusedNodeIfNeeded();
     void notifyRendererOfSelectionChange(EUserTriggered);
 
     void paintDragCaret(GraphicsContext*, const LayoutPoint&, const LayoutRect& clipRect) const;
@@ -285,6 +284,7 @@
     void notifyAccessibilityForSelectionChange();
 #endif
 
+    void setFocusedElementIfNeeded();
     void focusedOrActiveStateChanged();
 
     void caretBlinkTimerFired(Timer<FrameSelection>*);

Modified: trunk/Source/WebCore/editing/htmlediting.cpp (150711 => 150712)


--- trunk/Source/WebCore/editing/htmlediting.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/editing/htmlediting.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -674,15 +674,16 @@
     return toElement(enclosingNodeOfType(p, isTableCell));
 }
 
-Node* enclosingAnchorElement(const Position& p)
+Element* enclosingAnchorElement(const Position& p)
 {
     if (p.isNull())
         return 0;
-    
-    Node* node = p.deprecatedNode();
-    while (node && !(node->isElementNode() && node->isLink()))
-        node = node->parentNode();
-    return node;
+
+    for (Node* node = p.deprecatedNode(); node; node = node->parentNode()) {
+        if (node->isElementNode() && node->isLink())
+            return toElement(node);
+    }
+    return 0;
 }
 
 HTMLElement* enclosingList(Node* node)

Modified: trunk/Source/WebCore/editing/htmlediting.h (150711 => 150712)


--- trunk/Source/WebCore/editing/htmlediting.h	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/editing/htmlediting.h	2013-05-26 11:39:01 UTC (rev 150712)
@@ -64,7 +64,7 @@
 Element* enclosingBlock(Node*, EditingBoundaryCrossingRule = CannotCrossEditingBoundary);
 Node* enclosingTableCell(const Position&);
 Node* enclosingEmptyListItem(const VisiblePosition&);
-Node* enclosingAnchorElement(const Position&);
+Element* enclosingAnchorElement(const Position&);
 Node* enclosingNodeWithTag(const Position&, const QualifiedName&);
 Node* enclosingNodeOfType(const Position&, bool (*nodeIsOfType)(const Node*), EditingBoundaryCrossingRule = CannotCrossEditingBoundary);
 

Modified: trunk/Source/WebCore/page/EventHandler.cpp (150711 => 150712)


--- trunk/Source/WebCore/page/EventHandler.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -2362,10 +2362,10 @@
         // if the page already set it (e.g., by canceling default behavior).
         if (Page* page = m_frame->page()) {
             if (element && element->isMouseFocusable()) {
-                if (!page->focusController()->setFocusedNode(element, m_frame))
+                if (!page->focusController()->setFocusedElement(element, m_frame))
                     swallowEvent = true;
             } else if (!element || !element->focused()) {
-                if (!page->focusController()->setFocusedNode(0, m_frame))
+                if (!page->focusController()->setFocusedElement(0, m_frame))
                     swallowEvent = true;
             }
         }

Modified: trunk/Source/WebCore/page/FocusController.cpp (150711 => 150712)


--- trunk/Source/WebCore/page/FocusController.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/page/FocusController.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -590,13 +590,13 @@
     s->clear();
 }
 
-bool FocusController::setFocusedNode(Node* node, PassRefPtr<Frame> newFocusedFrame, FocusDirection direction)
+bool FocusController::setFocusedElement(Element* element, PassRefPtr<Frame> newFocusedFrame, FocusDirection direction)
 {
     RefPtr<Frame> oldFocusedFrame = focusedFrame();
     RefPtr<Document> oldDocument = oldFocusedFrame ? oldFocusedFrame->document() : 0;
     
     Node* oldFocusedNode = oldDocument ? oldDocument->focusedNode() : 0;
-    if (oldFocusedNode == node)
+    if (oldFocusedNode == element)
         return true;
 
     // FIXME: Might want to disable this check for caretBrowsing
@@ -605,19 +605,19 @@
 
     m_page->editorClient()->willSetInputMethodState();
 
-    clearSelectionIfNeeded(oldFocusedFrame.get(), newFocusedFrame.get(), node);
+    clearSelectionIfNeeded(oldFocusedFrame.get(), newFocusedFrame.get(), element);
 
-    if (!node) {
+    if (!element) {
         if (oldDocument)
             oldDocument->setFocusedNode(0);
         m_page->editorClient()->setInputMethodState(false);
         return true;
     }
 
-    RefPtr<Document> newDocument = node->document();
+    RefPtr<Document> newDocument = element->document();
 
-    if (newDocument && newDocument->focusedNode() == node) {
-        m_page->editorClient()->setInputMethodState(node->shouldUseInputMethod());
+    if (newDocument && newDocument->focusedNode() == element) {
+        m_page->editorClient()->setInputMethodState(element->shouldUseInputMethod());
         return true;
     }
     
@@ -630,16 +630,15 @@
     }
     setFocusedFrame(newFocusedFrame);
 
-    // Setting the focused node can result in losing our last reft to node when JS event handlers fire.
-    RefPtr<Node> protect = node;
+    RefPtr<Element> protect(element);
     if (newDocument) {
-        bool successfullyFocused = newDocument->setFocusedNode(node, direction);
+        bool successfullyFocused = newDocument->setFocusedNode(element, direction);
         if (!successfullyFocused)
             return false;
     }
 
-    if (newDocument->focusedNode() == node)
-        m_page->editorClient()->setInputMethodState(node->shouldUseInputMethod());
+    if (newDocument->focusedNode() == element)
+        m_page->editorClient()->setInputMethodState(element->shouldUseInputMethod());
 
     return true;
 }

Modified: trunk/Source/WebCore/page/FocusController.h (150711 => 150712)


--- trunk/Source/WebCore/page/FocusController.h	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/page/FocusController.h	2013-05-26 11:39:01 UTC (rev 150712)
@@ -69,9 +69,9 @@
 
     bool setInitialFocus(FocusDirection, KeyboardEvent*);
     bool advanceFocus(FocusDirection, KeyboardEvent*, bool initialFocus = false);
-        
-    bool setFocusedNode(Node*, PassRefPtr<Frame>, FocusDirection = FocusDirectionNone);
 
+    bool setFocusedElement(Element*, PassRefPtr<Frame>, FocusDirection = FocusDirectionNone);
+
     void setActive(bool);
     bool isActive() const { return m_isActive; }
 

Modified: trunk/Source/WebCore/plugins/PluginView.cpp (150711 => 150712)


--- trunk/Source/WebCore/plugins/PluginView.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebCore/plugins/PluginView.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -889,7 +889,7 @@
 {
     // Focus the plugin
     if (Page* page = m_parentFrame->page())
-        page->focusController()->setFocusedNode(m_element, m_parentFrame);
+        page->focusController()->setFocusedElement(m_element, m_parentFrame);
     else
         m_parentFrame->document()->setFocusedNode(m_element);
 }

Modified: trunk/Source/WebKit/blackberry/Api/WebPage.cpp (150711 => 150712)


--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -4167,7 +4167,7 @@
     ASSERT(frame->document());
 
     if (frame->document()->focusedNode())
-        frame->page()->focusController()->setFocusedNode(0, frame);
+        frame->page()->focusController()->setFocusedElement(0, frame);
 }
 
 BlackBerry::Platform::String WebPage::textEncoding()
@@ -4907,12 +4907,12 @@
         if (Page* page = doc->page()) {
             // Modify if focusing on node or turning off focused node.
             if (on) {
-                page->focusController()->setFocusedNode(nodeImpl, doc->frame());
+                page->focusController()->setFocusedElement(toElement(nodeImpl), doc->frame());
                 if (nodeImpl->isElementNode())
                     toElement(nodeImpl)->updateFocusAppearance(true);
                 d->m_inputHandler->didNodeOpenPopup(nodeImpl);
             } else if (doc->focusedNode() == nodeImpl) // && !on
-                page->focusController()->setFocusedNode(0, doc->frame());
+                page->focusController()->setFocusedElement(0, doc->frame());
 
             return true;
         }

Modified: trunk/Source/WebKit/blackberry/ChangeLog (150711 => 150712)


--- trunk/Source/WebKit/blackberry/ChangeLog	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit/blackberry/ChangeLog	2013-05-26 11:39:01 UTC (rev 150712)
@@ -1,3 +1,16 @@
+2013-05-26  Andreas Kling  <[email protected]>
+
+        FocusController::setFocusedNode() should be setFocusedElement().
+        <http://webkit.org/b/116780>
+
+        Reviewed by Antti Koivisto.
+
+        * Api/WebPage.cpp:
+        (BlackBerry::WebKit::WebPagePrivate::clearFocusNode):
+        (BlackBerry::WebKit::WebPage::setNodeFocus):
+        * WebKitSupport/SelectionHandler.cpp:
+        (BlackBerry::WebKit::SelectionHandler::selectObject):
+
 2013-05-24  Anders Carlsson  <[email protected]>
 
         Remove PagePopup code

Modified: trunk/Source/WebKit/blackberry/WebKitSupport/SelectionHandler.cpp (150711 => 150712)


--- trunk/Source/WebKit/blackberry/WebKitSupport/SelectionHandler.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit/blackberry/WebKitSupport/SelectionHandler.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -891,8 +891,11 @@
     VisibleSelection selection = VisibleSelection(pointLocation, pointLocation);
 
     // Move focus to the new node if we're not selecting in old input field.
-    if (!m_webPage->m_inputHandler->boundingBoxForInputField().contains(relativePoint))
-        m_webPage->m_page->focusController()->setFocusedNode(selection.start().anchorNode(), focusedFrame);
+    if (!m_webPage->m_inputHandler->boundingBoxForInputField().contains(relativePoint)) {
+        Node* anchorNode = selection.start().anchorNode();
+        if (!anchorNode || anchorNode->isElementNode())
+            m_webPage->m_page->focusController()->setFocusedElement(toElement(anchorNode), focusedFrame);
+    }
 
     m_selectionActive = expandSelectionToGranularity(focusedFrame, selection, granularity, m_webPage->m_inputHandler->isInputMode());
 }

Modified: trunk/Source/WebKit/win/ChangeLog (150711 => 150712)


--- trunk/Source/WebKit/win/ChangeLog	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit/win/ChangeLog	2013-05-26 11:39:01 UTC (rev 150712)
@@ -1,3 +1,13 @@
+2013-05-26  Andreas Kling  <[email protected]>
+
+        FocusController::setFocusedNode() should be setFocusedElement().
+        <http://webkit.org/b/116780>
+
+        Reviewed by Antti Koivisto.
+
+        * WebView.cpp:
+        (WebView::clearFocusNode):
+
 2013-05-24  Brent Fulgham  <[email protected]>
 
         [Windows] Expose database storage and cache locations via preferences.

Modified: trunk/Source/WebKit/win/WebView.cpp (150711 => 150712)


--- trunk/Source/WebKit/win/WebView.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit/win/WebView.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -5274,7 +5274,7 @@
 HRESULT STDMETHODCALLTYPE WebView::clearFocusNode()
 {
     if (m_page && m_page->focusController())
-        m_page->focusController()->setFocusedNode(0, 0);
+        m_page->focusController()->setFocusedElement(0, 0);
     return S_OK;
 }
 

Modified: trunk/Source/WebKit2/ChangeLog (150711 => 150712)


--- trunk/Source/WebKit2/ChangeLog	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit2/ChangeLog	2013-05-26 11:39:01 UTC (rev 150712)
@@ -1,3 +1,13 @@
+2013-05-26  Andreas Kling  <[email protected]>
+
+        FocusController::setFocusedNode() should be setFocusedElement().
+        <http://webkit.org/b/116780>
+
+        Reviewed by Antti Koivisto.
+
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::focusPluginElement):
+
 2013-05-25  Andreas Kling  <[email protected]>
 
         PluginDocument::pluginNode() should be pluginElement() instead.

Modified: trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp (150711 => 150712)


--- trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2013-05-26 09:43:22 UTC (rev 150711)
+++ trunk/Source/WebKit2/WebProcess/Plugins/PluginView.cpp	2013-05-26 11:39:01 UTC (rev 150712)
@@ -1032,7 +1032,7 @@
     ASSERT(frame());
     
     if (Page* page = frame()->page())
-       page->focusController()->setFocusedNode(m_pluginElement.get(), frame());
+        page->focusController()->setFocusedElement(m_pluginElement.get(), frame());
     else
        frame()->document()->setFocusedNode(m_pluginElement);
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to