Title: [125997] trunk/Source/WebCore
Revision
125997
Author
[email protected]
Date
2012-08-19 22:11:05 -0700 (Sun, 19 Aug 2012)

Log Message

[Forms] Set SpinButtonElement free from HTMLInputElement
https://bugs.webkit.org/show_bug.cgi?id=93941

Reviewed by Kent Tamura.

This patch removes dependency to HTMLInputElement from SpinButtonElement.

Functionalities used to be calling HTMLInputElement functions are
replaced to calling functions SpinButtonOwner class.

* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::focusAndSelectSpinButtonOwner): Moved functionality from SpinButtonElement::defaultEventHandler.
(WebCore::TextFieldInputType::shouldSpinButtonRespondToMouseEvents): Moved code from SpinButtonElement::willRespondToMouseClickEvents
(WebCore::TextFieldInputType::shouldSpinButtonRespondToWheelEvents): Moved code from SpinButtonElement::forwardEvent
* html/TextFieldInputType.h:
(TextFieldInputType):
* html/TimeInputType.cpp:
(WebCore::TimeInputType::DateTimeEditControlOwnerImpl::focusAndSelectEditControlOwner): Moved functionality from SpinButtonElement::defaultEventHandler.
(WebCore::TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerFocused): Added for DateTimeEditElement::shouldSpinButtonRespondToWheelEvents.
* html/TimeInputType.h:
* html/shadow/DateTimeEditElement.cpp:
(WebCore::DateTimeEditElement::focusAndSelectSpinButtonOwner): Added for SpinButtonElementOwner class change.
(WebCore::DateTimeEditElement::shouldSpinButtonRespondToMouseEvents): ditto
(WebCore::DateTimeEditElement::shouldSpinButtonRespondToWheelEvents): ditto
* html/shadow/DateTimeEditElement.h:
(EditControlOwner): Added new virtual function declarations for SpinButtonElementOwner class change.
(DateTimeEditElement): Added new function declarations for SpinButtonElementOwner.
* html/shadow/SpinButtonElement.cpp:
(WebCore::SpinButtonElement::defaultEventHandler): Changed to use SpinButtonElementOwner instead of HTMLInputElement.
(WebCore::SpinButtonElement::forwardEvent): ditto
(WebCore::SpinButtonElement::willRespondToMouseMoveEvents): ditto
(WebCore::SpinButtonElement::willRespondToMouseClickEvents): ditto
(WebCore::SpinButtonElement::step): ditto
(WebCore::SpinButtonElement::shouldRespondToMouseEvents): Added helper function for calling SpinButtonOwner instance.
* html/shadow/SpinButtonElement.h:
(SpinButtonOwner): Added new virtual function declarations.
(SpinButtonElement):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (125996 => 125997)


--- trunk/Source/WebCore/ChangeLog	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/ChangeLog	2012-08-20 05:11:05 UTC (rev 125997)
@@ -1,5 +1,45 @@
 2012-08-19  Yoshifumi Inoue  <[email protected]>
 
+        [Forms] Set SpinButtonElement free from HTMLInputElement
+        https://bugs.webkit.org/show_bug.cgi?id=93941
+
+        Reviewed by Kent Tamura.
+
+        This patch removes dependency to HTMLInputElement from SpinButtonElement.
+
+        Functionalities used to be calling HTMLInputElement functions are
+        replaced to calling functions SpinButtonOwner class.
+
+        * html/TextFieldInputType.cpp:
+        (WebCore::TextFieldInputType::focusAndSelectSpinButtonOwner): Moved functionality from SpinButtonElement::defaultEventHandler.
+        (WebCore::TextFieldInputType::shouldSpinButtonRespondToMouseEvents): Moved code from SpinButtonElement::willRespondToMouseClickEvents
+        (WebCore::TextFieldInputType::shouldSpinButtonRespondToWheelEvents): Moved code from SpinButtonElement::forwardEvent
+        * html/TextFieldInputType.h:
+        (TextFieldInputType):
+        * html/TimeInputType.cpp:
+        (WebCore::TimeInputType::DateTimeEditControlOwnerImpl::focusAndSelectEditControlOwner): Moved functionality from SpinButtonElement::defaultEventHandler.
+        (WebCore::TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerFocused): Added for DateTimeEditElement::shouldSpinButtonRespondToWheelEvents.
+        * html/TimeInputType.h:
+        * html/shadow/DateTimeEditElement.cpp:
+        (WebCore::DateTimeEditElement::focusAndSelectSpinButtonOwner): Added for SpinButtonElementOwner class change.
+        (WebCore::DateTimeEditElement::shouldSpinButtonRespondToMouseEvents): ditto
+        (WebCore::DateTimeEditElement::shouldSpinButtonRespondToWheelEvents): ditto
+        * html/shadow/DateTimeEditElement.h:
+        (EditControlOwner): Added new virtual function declarations for SpinButtonElementOwner class change.
+        (DateTimeEditElement): Added new function declarations for SpinButtonElementOwner.
+        * html/shadow/SpinButtonElement.cpp:
+        (WebCore::SpinButtonElement::defaultEventHandler): Changed to use SpinButtonElementOwner instead of HTMLInputElement.
+        (WebCore::SpinButtonElement::forwardEvent): ditto
+        (WebCore::SpinButtonElement::willRespondToMouseMoveEvents): ditto
+        (WebCore::SpinButtonElement::willRespondToMouseClickEvents): ditto
+        (WebCore::SpinButtonElement::step): ditto
+        (WebCore::SpinButtonElement::shouldRespondToMouseEvents): Added helper function for calling SpinButtonOwner instance.
+        * html/shadow/SpinButtonElement.h:
+        (SpinButtonOwner): Added new virtual function declarations.
+        (SpinButtonElement):
+
+2012-08-19  Yoshifumi Inoue  <[email protected]>
+
         [Tests] time-multiple-fields-appearance-basic.html and time-multiple-fields-appearance-pseudo-elements.html are failed on Chromium Mac
         https://bugs.webkit.org/show_bug.cgi?id=94439
 

Modified: trunk/Source/WebCore/html/TextFieldInputType.cpp (125996 => 125997)


--- trunk/Source/WebCore/html/TextFieldInputType.cpp	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/TextFieldInputType.cpp	2012-08-20 05:11:05 UTC (rev 125997)
@@ -456,4 +456,21 @@
     }
 }
 
+void TextFieldInputType::focusAndSelectSpinButtonOwner()
+{
+    RefPtr<HTMLInputElement> input(element());
+    input->focus();
+    input->select();
+}
+
+bool TextFieldInputType::shouldSpinButtonRespondToMouseEvents()
+{
+    return !element()->disabled() && !element()->readOnly();
+}
+
+bool TextFieldInputType::shouldSpinButtonRespondToWheelEvents()
+{
+    return shouldSpinButtonRespondToMouseEvents() && element()->focused();
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/html/TextFieldInputType.h (125996 => 125997)


--- trunk/Source/WebCore/html/TextFieldInputType.h	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/TextFieldInputType.h	2012-08-20 05:11:05 UTC (rev 125997)
@@ -86,6 +86,9 @@
     virtual void attach() OVERRIDE;
 
     // SpinButtonElement::SpinButtonOwner functions.
+    virtual void focusAndSelectSpinButtonOwner() OVERRIDE;
+    virtual bool shouldSpinButtonRespondToMouseEvents() OVERRIDE;
+    virtual bool shouldSpinButtonRespondToWheelEvents() OVERRIDE;
     virtual void spinButtonStepDown() OVERRIDE;
     virtual void spinButtonStepUp() OVERRIDE;
 

Modified: trunk/Source/WebCore/html/TimeInputType.cpp (125996 => 125997)


--- trunk/Source/WebCore/html/TimeInputType.cpp	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/TimeInputType.cpp	2012-08-20 05:11:05 UTC (rev 125997)
@@ -138,11 +138,23 @@
     input->dispatchFormControlChangeEvent();
 }
 
+void TimeInputType::DateTimeEditControlOwnerImpl::focusAndSelectEditControlOwner()
+{
+    RefPtr<HTMLInputElement> input(m_timeInputType.element());
+    input->focus();
+    input->select();
+}
+
 bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerDisabled() const
 {
     return m_timeInputType.element()->readOnly();
 }
 
+bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerFocused() const
+{
+    return m_timeInputType.element()->focused();
+}
+
 bool TimeInputType::DateTimeEditControlOwnerImpl::isEditControlOwnerReadOnly() const
 {
     return m_timeInputType.element()->disabled();

Modified: trunk/Source/WebCore/html/TimeInputType.h (125996 => 125997)


--- trunk/Source/WebCore/html/TimeInputType.h	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/TimeInputType.h	2012-08-20 05:11:05 UTC (rev 125997)
@@ -70,7 +70,9 @@
     private:
         virtual void editControlMouseFocus() OVERRIDE FINAL;
         virtual void editControlValueChanged() OVERRIDE FINAL;
+        virtual void focusAndSelectEditControlOwner() OVERRIDE FINAL;
         virtual bool isEditControlOwnerDisabled() const OVERRIDE FINAL;
+        virtual bool isEditControlOwnerFocused() const OVERRIDE FINAL;
         virtual bool isEditControlOwnerReadOnly() const OVERRIDE FINAL;
 
         TimeInputType& m_timeInputType;

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp (125996 => 125997)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.cpp	2012-08-20 05:11:05 UTC (rev 125997)
@@ -230,6 +230,13 @@
     return fieldIndex < m_fields.size() ? m_fields[fieldIndex] : 0;
 }
 
+void DateTimeEditElement::focusAndSelectSpinButtonOwner()
+{
+    if (!m_editControlOwner)
+        return;
+    m_editControlOwner->focusAndSelectEditControlOwner();
+}
+
 void DateTimeEditElement::focusFieldAt(size_t newFocusFieldIndex)
 {
     if (m_focusFieldIndex == newFocusFieldIndex)
@@ -439,6 +446,19 @@
         m_fields[fieldIndex]->setEmptyValue(dateForReadOnlyField, DateTimeFieldElement::DispatchNoEvent);
 }
 
+bool DateTimeEditElement::shouldSpinButtonRespondToMouseEvents()
+{
+    return !isDisabled() && !isReadOnly();
+}
+
+bool DateTimeEditElement::shouldSpinButtonRespondToWheelEvents()
+{
+    if (!shouldSpinButtonRespondToMouseEvents())
+        return false;
+
+    return !m_editControlOwner || m_editControlOwner->isEditControlOwnerFocused();
+}
+
 void DateTimeEditElement::spinButtonStepDown()
 {
     if (DateTimeFieldElement* const focusField = fieldAt(m_focusFieldIndex))

Modified: trunk/Source/WebCore/html/shadow/DateTimeEditElement.h (125996 => 125997)


--- trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/shadow/DateTimeEditElement.h	2012-08-20 05:11:05 UTC (rev 125997)
@@ -51,9 +51,11 @@
     class EditControlOwner {
     public:
         virtual ~EditControlOwner();
+        virtual void focusAndSelectEditControlOwner() = 0;
         virtual void editControlMouseFocus() = 0;
         virtual void editControlValueChanged() = 0;
         virtual bool isEditControlOwnerDisabled() const = 0;
+        virtual bool isEditControlOwnerFocused() const = 0;
         virtual bool isEditControlOwnerReadOnly() const = 0;
     };
 
@@ -102,6 +104,9 @@
     virtual void focusOnNextField() OVERRIDE FINAL;
 
     // SpinButtonElement::SpinButtonOwner functions.
+    virtual void focusAndSelectSpinButtonOwner() OVERRIDE FINAL;
+    virtual bool shouldSpinButtonRespondToMouseEvents() OVERRIDE FINAL;
+    virtual bool shouldSpinButtonRespondToWheelEvents() OVERRIDE FINAL;
     virtual void spinButtonStepDown() OVERRIDE FINAL;
     virtual void spinButtonStepUp() OVERRIDE FINAL;
 

Modified: trunk/Source/WebCore/html/shadow/SpinButtonElement.cpp (125996 => 125997)


--- trunk/Source/WebCore/html/shadow/SpinButtonElement.cpp	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/shadow/SpinButtonElement.cpp	2012-08-20 05:11:05 UTC (rev 125997)
@@ -30,7 +30,6 @@
 #include "EventHandler.h"
 #include "EventNames.h"
 #include "Frame.h"
-#include "HTMLInputElement.h"
 #include "HTMLNames.h"
 #include "MouseEvent.h"
 #include "RenderBox.h"
@@ -83,8 +82,7 @@
         return;
     }
 
-    RefPtr<HTMLInputElement> input(static_cast<HTMLInputElement*>(shadowHost()));
-    if (input->disabled() || input->readOnly()) {
+    if (!shouldRespondToMouseEvents()) {
         if (!event->defaultHandled())
             HTMLDivElement::defaultEventHandler(event);
         return;
@@ -98,8 +96,8 @@
             // code which detaches this shadow node. We need to take a reference
             // and check renderer() after such function calls.
             RefPtr<Node> protector(this);
-            input->focus();
-            input->select();
+            if (m_spinButtonOwner)
+                m_spinButtonOwner->focusAndSelectSpinButtonOwner();
             if (renderer()) {
                 if (m_upDownState != Indeterminate) {
                     doStepAction(m_upDownState == Up ? 1 : -1);
@@ -141,18 +139,19 @@
     if (!event->hasInterface(eventNames().interfaceForWheelEvent))
         return;
 
-    HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost());
-    if (input->disabled() || input->readOnly() || !input->focused())
+    if (!m_spinButtonOwner)
         return;
 
+    if (!m_spinButtonOwner->shouldSpinButtonRespondToWheelEvents())
+        return;
+
     doStepAction(static_cast<WheelEvent*>(event)->wheelDeltaY());
     event->setDefaultHandled();
 }
 
 bool SpinButtonElement::willRespondToMouseMoveEvents()
 {
-    const HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost());
-    if (renderBox() && !input->disabled() && !input->readOnly())
+    if (renderBox() && shouldRespondToMouseEvents())
         return true;
 
     return HTMLDivElement::willRespondToMouseMoveEvents();
@@ -160,8 +159,7 @@
 
 bool SpinButtonElement::willRespondToMouseClickEvents()
 {
-    const HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost());
-    if (renderBox() && !input->disabled() && !input->readOnly())
+    if (renderBox() && shouldRespondToMouseEvents())
         return true;
 
     return HTMLDivElement::willRespondToMouseClickEvents();
@@ -213,8 +211,7 @@
 
 void SpinButtonElement::step(int amount)
 {
-    HTMLInputElement* input = static_cast<HTMLInputElement*>(shadowHost());
-    if (input->disabled() || input->readOnly())
+    if (!shouldRespondToMouseEvents())
         return;
     // On Mac OS, NSStepper updates the value for the button under the mouse
     // cursor regardless of the button pressed at the beginning. So the
@@ -239,4 +236,9 @@
     HTMLDivElement::setHovered(flag);
 }
 
+bool SpinButtonElement::shouldRespondToMouseEvents()
+{
+    return !m_spinButtonOwner || m_spinButtonOwner->shouldSpinButtonRespondToMouseEvents();
 }
+
+}

Modified: trunk/Source/WebCore/html/shadow/SpinButtonElement.h (125996 => 125997)


--- trunk/Source/WebCore/html/shadow/SpinButtonElement.h	2012-08-20 04:52:56 UTC (rev 125996)
+++ trunk/Source/WebCore/html/shadow/SpinButtonElement.h	2012-08-20 05:11:05 UTC (rev 125997)
@@ -29,7 +29,6 @@
 
 #include "HTMLDivElement.h"
 #include "Timer.h"
-#include <wtf/Forward.h>
 
 namespace WebCore {
 
@@ -44,6 +43,9 @@
     class SpinButtonOwner {
     public:
         virtual ~SpinButtonOwner() { }
+        virtual void focusAndSelectSpinButtonOwner() = 0;
+        virtual bool shouldSpinButtonRespondToMouseEvents() = 0;
+        virtual bool shouldSpinButtonRespondToWheelEvents() = 0;
         virtual void spinButtonStepDown() = 0;
         virtual void spinButtonStepUp() = 0;
     };
@@ -78,6 +80,7 @@
     void stopRepeatingTimer();
     void repeatingTimerFired(Timer<SpinButtonElement>*);
     virtual void setHovered(bool = true);
+    bool shouldRespondToMouseEvents();
     virtual bool isMouseFocusable() const { return false; }
 
     SpinButtonOwner* m_spinButtonOwner;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to