Chromium Code Reviews| Index: Source/core/html/shadow/SpinButtonElement.cpp |
| diff --git a/Source/core/html/shadow/SpinButtonElement.cpp b/Source/core/html/shadow/SpinButtonElement.cpp |
| index 04e21b86af6f1ea332e91be804b0b1b0519bbc43..8f0b87dfa31b1064ad860f1753befad9ebdf61e3 100644 |
| --- a/Source/core/html/shadow/SpinButtonElement.cpp |
| +++ b/Source/core/html/shadow/SpinButtonElement.cpp |
| @@ -47,6 +47,7 @@ inline SpinButtonElement::SpinButtonElement(Document& document, SpinButtonOwner& |
| : HTMLDivElement(document) |
| , m_spinButtonOwner(&spinButtonOwner) |
| , m_capturing(false) |
| + , m_mouseEvent(false) |
| , m_upDownState(Indeterminate) |
| , m_pressStartingState(Indeterminate) |
| , m_repeatingTimer(this, &SpinButtonElement::repeatingTimerFired) |
| @@ -111,8 +112,10 @@ void SpinButtonElement::defaultEventHandler(Event* event) |
| } |
| event->setDefaultHandled(); |
| } |
| + m_mouseEvent = true; |
| } else if (mouseEvent->type() == EventTypeNames::mouseup && mouseEvent->button() == LeftButton) { |
| releaseCapture(); |
| + m_mouseEvent = true; |
| } else if (event->type() == EventTypeNames::mousemove) { |
| if (box->pixelSnappedBorderBoxRect().contains(local)) { |
| if (!m_capturing) { |
| @@ -131,6 +134,7 @@ void SpinButtonElement::defaultEventHandler(Event* event) |
| releaseCapture(); |
| m_upDownState = Indeterminate; |
| } |
| + m_mouseEvent = true; |
|
tkent
2014/02/04 04:57:34
This approach doesn't work for hovering case.
1. W
|
| } |
| if (!event->defaultHandled()) |
| @@ -198,8 +202,10 @@ void SpinButtonElement::releaseCapture() |
| if (Page* page = document().page()) |
| page->chrome().unregisterPopupOpeningObserver(this); |
| } |
| - if (m_spinButtonOwner) |
| - m_spinButtonOwner->spinButtonDidReleaseMouseCapture(); |
| + } |
| + if (m_spinButtonOwner && m_mouseEvent) { |
| + m_spinButtonOwner->spinButtonDidReleaseMouseCapture(); |
| + m_mouseEvent = false; |
| } |
| } |