From c8040172a48006475b7f34c5ebe04ee286c0a32e Mon Sep 17 00:00:00 2001 From: Mike West Date: Wed, 22 Jan 2014 14:12:39 +0100 Subject: [PATCH 19/20] Mouseup event does not fire on Scroll Bar https://bugs.webkit.org/show_bug.cgi?id=25811 Reviewed by Tony Chang. Source/WebCore: Currently, clicking on a scrollbar fires a mousedown event, but not a mouseup event. This causes problems for code like jQuery UI's draggable[1], as the drag starts, but is never cancelled. Other use cases are noted in the slightly old Chromium bug[2]. If a mouseup event is received after a mousedown event on a scrollbar, this patch dispatches a mouseup event on the same node the mousedown event dispatched on. This matches Gecko's behavior. [1]: http://bugs.jqueryui.com/ticket/6925 [2]: http://crbug.com/14204 Tests: fast/scrolling/scrollbar-mousedown-mouseup.html fast/scrolling/scrollbar-mousedown-move-mouseup.html * page/EventHandler.cpp: (WebCore::EventHandler::handleMouseReleaseEvent): If a mouseup event follow a mousedown event on a scrollbar, dispatch an event on the same node from which the mousedown event was triggered. LayoutTests: * fast/scrolling/scrollbar-mousedown-mouseup-expected.txt: Added. * fast/scrolling/scrollbar-mousedown-mouseup.html: Added. * fast/scrolling/scrollbar-mousedown-move-mouseup-expected.txt: Added. * fast/scrolling/scrollbar-mousedown-move-mouseup.html: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@143560 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 12 ++++ .../scrollbar-mousedown-mouseup-expected.txt | 19 ++++++ .../scrolling/scrollbar-mousedown-mouseup.html | 67 ++++++++++++++++++++ .../scrollbar-mousedown-move-mouseup-expected.txt | 16 +++++ .../scrollbar-mousedown-move-mouseup.html | 72 ++++++++++++++++++++++ Source/WebCore/ChangeLog | 28 +++++++++ Source/WebCore/page/EventHandler.cpp | 5 +- 7 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 LayoutTests/fast/scrolling/scrollbar-mousedown-mouseup-expected.txt create mode 100644 LayoutTests/fast/scrolling/scrollbar-mousedown-mouseup.html create mode 100644 LayoutTests/fast/scrolling/scrollbar-mousedown-move-mouseup-expected.txt create mode 100644 LayoutTests/fast/scrolling/scrollbar-mousedown-move-mouseup.html diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 3fb41fe..8f1c3cc 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -627,6 +627,34 @@ * rendering/RenderBlock.cpp: (WebCore::RenderBlock::containingColumnsBlock): +2013-02-20 Mike West + + Mouseup event does not fire on Scroll Bar + https://bugs.webkit.org/show_bug.cgi?id=25811 + + Reviewed by Tony Chang. + + Currently, clicking on a scrollbar fires a mousedown event, but not a + mouseup event. This causes problems for code like jQuery UI's + draggable[1], as the drag starts, but is never cancelled. Other use + cases are noted in the slightly old Chromium bug[2]. + + If a mouseup event is received after a mousedown event on a scrollbar, + this patch dispatches a mouseup event on the same node the mousedown + event dispatched on. This matches Gecko's behavior. + + [1]: http://bugs.jqueryui.com/ticket/6925 + [2]: http://crbug.com/14204 + + Tests: fast/scrolling/scrollbar-mousedown-mouseup.html + fast/scrolling/scrollbar-mousedown-move-mouseup.html + + * page/EventHandler.cpp: + (WebCore::EventHandler::handleMouseReleaseEvent): + If a mouseup event follow a mousedown event on a scrollbar, + dispatch an event on the same node from which the mousedown event + was triggered. + 2013-02-19 Andras Becsi [Qt] Fix compilation if Qt was configured with -no-rtti diff --git a/Source/WebCore/page/EventHandler.cpp b/Source/WebCore/page/EventHandler.cpp index 22d616e..68f2359 100644 --- a/Source/WebCore/page/EventHandler.cpp +++ b/Source/WebCore/page/EventHandler.cpp @@ -1955,7 +1955,10 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) if (m_lastScrollbarUnderMouse) { invalidateClick(); - return m_lastScrollbarUnderMouse->mouseUp(mouseEvent); + m_lastScrollbarUnderMouse->mouseUp(mouseEvent); + bool cancelable = true; + bool setUnder = false; + return !dispatchMouseEvent(eventNames().mouseupEvent, m_lastNodeUnderMouse.get(), cancelable, m_clickCount, mouseEvent, setUnder); } HitTestRequest request(HitTestRequest::Release); -- 1.8.5.3