Index: Source/core/page/EventHandler.cpp |
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
index 530cae3a1d43a9a4888662dc67a9f314cd0b1532..95680b0a9bd6e621fc9d8f355720928109031b08 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,25 @@ 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) |
+AutoscrollController* EventHandler::autoscrollController() const |
+{ |
+ if (Page* page = m_frame->page()) |
+ return &page->autoscrollController(); |
+ return 0; |
+} |
+ |
bool EventHandler::panScrollInProgress() const |
{ |
- Page* page = m_frame->page(); |
- return page && page->panScrollInProgress(); |
+ return autoscrollController() && autoscrollController()->panScrollInProgress(); |
} |
HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTestRequest::HitTestRequestType hitType, const LayoutSize& padding) |
@@ -908,12 +915,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 +1359,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 +1657,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 +1828,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 +1914,7 @@ bool EventHandler::performDragAndDrop(const PlatformMouseEvent& event, Clipboard |
void EventHandler::clearDragState() |
{ |
- stopAutoscrollTimer(); |
+ stopAutoscroll(); |
m_dragTarget = 0; |
m_capturingMouseEventsNode = 0; |
m_shouldOnlyFireDragOverEvent = false; |
@@ -3018,7 +3023,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; |