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