- 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;