Chromium Code Reviews| Index: Source/core/page/EventHandler.cpp |
| diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
| index 530cae3a1d43a9a4888662dc67a9f314cd0b1532..3ea9399a8d2b9a90f08e9fff9161071eb7270052 100644 |
| --- a/Source/core/page/EventHandler.cpp |
| +++ b/Source/core/page/EventHandler.cpp |
| @@ -57,6 +57,7 @@ |
| #include "core/html/HTMLInputElement.h" |
| #include "core/loader/FrameLoader.h" |
| #include "core/loader/FrameLoaderClient.h" |
| +#include "core/page/AutoscrollController.h" |
| #include "core/page/BackForwardClient.h" |
| #include "core/page/Chrome.h" |
| #include "core/page/DragController.h" |
| @@ -702,8 +703,8 @@ bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e |
| m_mouseDownMayStartDrag = false; |
| if (m_mouseDownMayStartAutoscroll && !panScrollInProgress()) { |
| - if (Page* page = m_frame->page()) { |
| - page->startAutoscrollForSelection(renderer); |
| + if (AutoscrollController* controller = autoscrollController()) { |
| + controller->startAutoscrollForSelection(renderer); |
| m_mouseDownMayStartAutoscroll = false; |
| } |
| } |
| @@ -800,9 +801,9 @@ void EventHandler::updateSelectionForMouseDrag(const HitTestResult& hitTestResul |
| bool EventHandler::handleMouseReleaseEvent(const MouseEventWithHitTestResults& event) |
| { |
| - Page* page = m_frame->page(); |
| - if (page && page->autoscrollInProgress()) |
| - stopAutoscrollTimer(); |
| + AutoscrollController* controller = autoscrollController(); |
| + if (controller && controller->autoscrollInProgress()) |
| + stopAutoscroll(); |
| // Used to prevent mouseMoveEvent from initiating a drag before |
| // the mouse is pressed again. |
| @@ -854,19 +855,26 @@ void EventHandler::startPanScrolling(RenderObject* renderer) |
| { |
| if (!renderer->isBox()) |
| return; |
| - Page* page = m_frame->page(); |
| - if (!page) |
| + AutoscrollController* controller = autoscrollController(); |
| + if (!controller) |
| return; |
| - page->startPanScrolling(toRenderBox(renderer), lastKnownMousePosition()); |
| + controller->startPanScrolling(toRenderBox(renderer), lastKnownMousePosition()); |
| invalidateClick(); |
| } |
| #endif // OS(WIN) |
| -bool EventHandler::panScrollInProgress() const |
| +AutoscrollController* EventHandler::autoscrollController() const |
| { |
| Page* page = m_frame->page(); |
| - return page && page->panScrollInProgress(); |
| + if (!page) |
| + return 0; |
| + return &page->autoscrollController(); |
|
esprehn
2013/11/01 19:37:37
We usually write:
if (Page* page = m_frame->page(
|
| +} |
| + |
| +bool EventHandler::panScrollInProgress() const |
| +{ |
| + return autoscrollController() && autoscrollController()->panScrollInProgress(); |
| } |
| HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTestRequest::HitTestRequestType hitType, const LayoutSize& padding) |
| @@ -908,12 +916,10 @@ HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTe |
| return result; |
| } |
| -void EventHandler::stopAutoscrollTimer() |
| +void EventHandler::stopAutoscroll() |
| { |
| - Page* page = m_frame->page(); |
| - if (!page) |
| - return; |
| - page->stopAutoscrollTimer(); |
| + if (AutoscrollController* controller = autoscrollController()) |
| + controller->stopAutoscroll(); |
| } |
| Node* EventHandler::mousePressNode() const |
| @@ -1354,10 +1360,10 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent) |
| } |
| #if OS(WIN) |
| - // We store whether pan scrolling is in progress before calling stopAutoscrollTimer() |
| + // We store whether pan scrolling is in progress before calling stopAutoscroll() |
| // because it will set m_autoscrollType to NoAutoscroll on return. |
| bool isPanScrollInProgress = panScrollInProgress(); |
| - stopAutoscrollTimer(); |
| + stopAutoscroll(); |
| if (isPanScrollInProgress) { |
| // We invalidate the click when exiting pan scrolling so that we don't inadvertently navigate |
| // away from the current page (e.g. the click was on a hyperlink). See <rdar://problem/6095023>. |
| @@ -1652,7 +1658,7 @@ bool EventHandler::handleMouseReleaseEvent(const PlatformMouseEvent& mouseEvent) |
| #if OS(WIN) |
| if (Page* page = m_frame->page()) |
| - page->handleMouseReleaseForPanScrolling(m_frame, mouseEvent); |
| + page->autoscrollController().handleMouseReleaseForPanScrolling(m_frame, mouseEvent); |
| #endif |
| m_mousePressed = false; |
| @@ -1823,8 +1829,8 @@ bool EventHandler::updateDragAndDrop(const PlatformMouseEvent& event, Clipboard* |
| if (newTarget && newTarget->isTextNode()) |
| newTarget = EventPath::parent(newTarget.get()); |
| - if (Page* page = m_frame->page()) |
| - page->updateDragAndDrop(newTarget.get(), event.position(), event.timestamp()); |
| + if (AutoscrollController* controller = autoscrollController()) |
| + controller->updateDragAndDrop(newTarget.get(), event.position(), event.timestamp()); |
| if (m_dragTarget != newTarget) { |
| // FIXME: this ordering was explicitly chosen to match WinIE. However, |
| @@ -1909,7 +1915,7 @@ bool EventHandler::performDragAndDrop(const PlatformMouseEvent& event, Clipboard |
| void EventHandler::clearDragState() |
| { |
| - stopAutoscrollTimer(); |
| + stopAutoscroll(); |
| m_dragTarget = 0; |
| m_capturingMouseEventsNode = 0; |
| m_shouldOnlyFireDragOverEvent = false; |
| @@ -3018,7 +3024,7 @@ bool EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent) |
| if (panScrollInProgress()) { |
| // If a key is pressed while the panScroll is in progress then we want to stop |
| if (initialKeyEvent.type() == PlatformEvent::KeyDown || initialKeyEvent.type() == PlatformEvent::RawKeyDown) |
| - stopAutoscrollTimer(); |
| + stopAutoscroll(); |
| // If we were in panscroll mode, we swallow the key event |
| return true; |