| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 if (!parent) | 374 if (!parent) |
| 375 return WebInputEventResult::NotHandled; | 375 return WebInputEventResult::NotHandled; |
| 376 | 376 |
| 377 layoutObject = parent->layoutObject(); | 377 layoutObject = parent->layoutObject(); |
| 378 if (!layoutObject || !layoutObject->isListBox()) | 378 if (!layoutObject || !layoutObject->isListBox()) |
| 379 return WebInputEventResult::NotHandled; | 379 return WebInputEventResult::NotHandled; |
| 380 } | 380 } |
| 381 | 381 |
| 382 m_mouseDownMayStartDrag = false; | 382 m_mouseDownMayStartDrag = false; |
| 383 | 383 |
| 384 if (m_mouseDownMayStartAutoscroll && !m_scrollManager->panScrollInProgress()
) { | 384 if (m_mouseDownMayStartAutoscroll && !m_scrollManager->middleClickAutoscroll
InProgress()) { |
| 385 if (AutoscrollController* controller = m_scrollManager->autoscrollContro
ller()) { | 385 if (AutoscrollController* controller = m_scrollManager->autoscrollContro
ller()) { |
| 386 controller->startAutoscrollForSelection(layoutObject); | 386 controller->startAutoscrollForSelection(layoutObject); |
| 387 m_mouseDownMayStartAutoscroll = false; | 387 m_mouseDownMayStartAutoscroll = false; |
| 388 } | 388 } |
| 389 } | 389 } |
| 390 | 390 |
| 391 selectionController().handleMouseDraggedEvent(event, m_mouseDownPos, m_dragS
tartPos, m_mousePressNode.get(), m_lastKnownMousePosition); | 391 selectionController().handleMouseDraggedEvent(event, m_mouseDownPos, m_dragS
tartPos, m_mousePressNode.get(), m_lastKnownMousePosition); |
| 392 return WebInputEventResult::HandledSystem; | 392 return WebInputEventResult::HandledSystem; |
| 393 } | 393 } |
| 394 | 394 |
| 395 void EventHandler::updateSelectionForMouseDrag() | 395 void EventHandler::updateSelectionForMouseDrag() |
| 396 { | 396 { |
| 397 selectionController().updateSelectionForMouseDrag(m_mousePressNode.get(), m_
dragStartPos, m_lastKnownMousePosition); | 397 selectionController().updateSelectionForMouseDrag(m_mousePressNode.get(), m_
dragStartPos, m_lastKnownMousePosition); |
| 398 } | 398 } |
| 399 | 399 |
| 400 // TODO(nzolghadr): Refactor the mouse related functions to MouseEventManager. | 400 // TODO(nzolghadr): Refactor the mouse related functions to MouseEventManager. |
| 401 WebInputEventResult EventHandler::handleMouseReleaseEvent(const MouseEventWithHi
tTestResults& event) | 401 WebInputEventResult EventHandler::handleMouseReleaseEvent(const MouseEventWithHi
tTestResults& event) |
| 402 { | 402 { |
| 403 AutoscrollController* controller = m_scrollManager->autoscrollController(); | 403 AutoscrollController* controller = m_scrollManager->autoscrollController(); |
| 404 if (controller && controller->autoscrollInProgress()) | 404 if (controller && controller->autoscrollInProgress()) |
| 405 m_scrollManager->stopAutoscroll(); | 405 m_scrollManager->stopAutoscroll(); |
| 406 | 406 |
| 407 return selectionController().handleMouseReleaseEvent(event, m_dragStartPos)
? WebInputEventResult::HandledSystem : WebInputEventResult::NotHandled; | 407 return selectionController().handleMouseReleaseEvent(event, m_dragStartPos)
? WebInputEventResult::HandledSystem : WebInputEventResult::NotHandled; |
| 408 } | 408 } |
| 409 | 409 |
| 410 #if OS(WIN) | 410 void EventHandler::startMiddleClickAutoscroll(LayoutObject* layoutObject) |
| 411 | |
| 412 void EventHandler::startPanScrolling(LayoutObject* layoutObject) | |
| 413 { | 411 { |
| 412 DCHECK(RuntimeEnabledFeatures::middleClickAutoscrollEnabled()); |
| 414 if (!layoutObject->isBox()) | 413 if (!layoutObject->isBox()) |
| 415 return; | 414 return; |
| 416 AutoscrollController* controller = m_scrollManager->autoscrollController(); | 415 AutoscrollController* controller = m_scrollManager->autoscrollController(); |
| 417 if (!controller) | 416 if (!controller) |
| 418 return; | 417 return; |
| 419 controller->startPanScrolling(toLayoutBox(layoutObject), lastKnownMousePosit
ion()); | 418 controller->startMiddleClickAutoscroll(toLayoutBox(layoutObject), lastKnownM
ousePosition()); |
| 420 invalidateClick(); | 419 invalidateClick(); |
| 421 } | 420 } |
| 422 | 421 |
| 423 #endif // OS(WIN) | |
| 424 | |
| 425 HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTe
stRequest::HitTestRequestType hitType, const LayoutSize& padding) | 422 HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTe
stRequest::HitTestRequestType hitType, const LayoutSize& padding) |
| 426 { | 423 { |
| 427 TRACE_EVENT0("blink", "EventHandler::hitTestResultAtPoint"); | 424 TRACE_EVENT0("blink", "EventHandler::hitTestResultAtPoint"); |
| 428 | 425 |
| 429 ASSERT((hitType & HitTestRequest::ListBased) || padding.isEmpty()); | 426 ASSERT((hitType & HitTestRequest::ListBased) || padding.isEmpty()); |
| 430 | 427 |
| 431 // We always send hitTestResultAtPoint to the main frame if we have one, | 428 // We always send hitTestResultAtPoint to the main frame if we have one, |
| 432 // otherwise we might hit areas that are obscured by higher frames. | 429 // otherwise we might hit areas that are obscured by higher frames. |
| 433 if (m_frame->page()) { | 430 if (m_frame->page()) { |
| 434 LocalFrame* mainFrame = m_frame->localFrameRoot(); | 431 LocalFrame* mainFrame = m_frame->localFrameRoot(); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 } | 562 } |
| 566 | 563 |
| 567 OptionalCursor EventHandler::selectCursor(const HitTestResult& result) | 564 OptionalCursor EventHandler::selectCursor(const HitTestResult& result) |
| 568 { | 565 { |
| 569 if (m_scrollManager->inResizeMode()) | 566 if (m_scrollManager->inResizeMode()) |
| 570 return NoCursorChange; | 567 return NoCursorChange; |
| 571 | 568 |
| 572 Page* page = m_frame->page(); | 569 Page* page = m_frame->page(); |
| 573 if (!page) | 570 if (!page) |
| 574 return NoCursorChange; | 571 return NoCursorChange; |
| 575 if (m_scrollManager->panScrollInProgress()) | 572 if (m_scrollManager->middleClickAutoscrollInProgress()) |
| 576 return NoCursorChange; | 573 return NoCursorChange; |
| 577 | 574 |
| 578 Node* node = result.innerPossiblyPseudoNode(); | 575 Node* node = result.innerPossiblyPseudoNode(); |
| 579 if (!node) | 576 if (!node) |
| 580 return selectAutoCursor(result, node, iBeamCursor()); | 577 return selectAutoCursor(result, node, iBeamCursor()); |
| 581 | 578 |
| 582 LayoutObject* layoutObject = node->layoutObject(); | 579 LayoutObject* layoutObject = node->layoutObject(); |
| 583 const ComputedStyle* style = layoutObject ? layoutObject->style() : nullptr; | 580 const ComputedStyle* style = layoutObject ? layoutObject->style() : nullptr; |
| 584 | 581 |
| 585 if (layoutObject) { | 582 if (layoutObject) { |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 // has been handled. See crbug.com/269917 | 792 // has been handled. See crbug.com/269917 |
| 796 m_capturesDragging = subframe->eventHandler().capturesDragging(); | 793 m_capturesDragging = subframe->eventHandler().capturesDragging(); |
| 797 if (m_mousePressed && m_capturesDragging) { | 794 if (m_mousePressed && m_capturesDragging) { |
| 798 m_capturingMouseEventsNode = mev.innerNode(); | 795 m_capturingMouseEventsNode = mev.innerNode(); |
| 799 m_eventHandlerWillResetCapturingMouseEventsNode = true; | 796 m_eventHandlerWillResetCapturingMouseEventsNode = true; |
| 800 } | 797 } |
| 801 invalidateClick(); | 798 invalidateClick(); |
| 802 return result; | 799 return result; |
| 803 } | 800 } |
| 804 | 801 |
| 805 #if OS(WIN) | 802 if (RuntimeEnabledFeatures::middleClickAutoscrollEnabled()) { |
| 806 // We store whether pan scrolling is in progress before calling stopAutoscro
ll() | 803 // We store whether middle click autoscroll is in progress before callin
g stopAutoscroll() |
| 807 // because it will set m_autoscrollType to NoAutoscroll on return. | 804 // because it will set m_autoscrollType to NoAutoscroll on return. |
| 808 bool isPanScrollInProgress = m_scrollManager->panScrollInProgress(); | 805 bool isMiddleClickAutoscrollInProgress = m_scrollManager->middleClickAut
oscrollInProgress(); |
| 809 m_scrollManager->stopAutoscroll(); | 806 m_scrollManager->stopAutoscroll(); |
| 810 if (isPanScrollInProgress) { | 807 if (isMiddleClickAutoscrollInProgress) { |
| 811 // We invalidate the click when exiting pan scrolling so that we don't i
nadvertently navigate | 808 // We invalidate the click when exiting middle click auto scroll so
that we don't inadvertently navigate |
| 812 // away from the current page (e.g. the click was on a hyperlink). See <
rdar://problem/6095023>. | 809 // away from the current page (e.g. the click was on a hyperlink). S
ee <rdar://problem/6095023>. |
| 813 invalidateClick(); | 810 invalidateClick(); |
| 814 return WebInputEventResult::HandledSuppressed; | 811 return WebInputEventResult::HandledSuppressed; |
| 812 } |
| 815 } | 813 } |
| 816 #endif | |
| 817 | 814 |
| 818 m_clickCount = mouseEvent.clickCount(); | 815 m_clickCount = mouseEvent.clickCount(); |
| 819 m_clickNode = mev.innerNode()->isTextNode() ? FlatTreeTraversal::parent(*me
v.innerNode()) : mev.innerNode(); | 816 m_clickNode = mev.innerNode()->isTextNode() ? FlatTreeTraversal::parent(*me
v.innerNode()) : mev.innerNode(); |
| 820 | 817 |
| 821 if (!mouseEvent.fromTouch()) | 818 if (!mouseEvent.fromTouch()) |
| 822 m_frame->selection().setCaretBlinkingSuspended(true); | 819 m_frame->selection().setCaretBlinkingSuspended(true); |
| 823 | 820 |
| 824 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mousedown, mev.innerNode(), m_clickCount, mev.event()); | 821 WebInputEventResult eventResult = updatePointerTargetAndDispatchEvents(Event
TypeNames::mousedown, mev.innerNode(), m_clickCount, mev.event()); |
| 825 | 822 |
| 826 if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) { | 823 if (eventResult == WebInputEventResult::NotHandled && m_frame->view()) { |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 if (!mouseEvent.fromTouch()) | 1074 if (!mouseEvent.fromTouch()) |
| 1078 m_frame->selection().setCaretBlinkingSuspended(false); | 1075 m_frame->selection().setCaretBlinkingSuspended(false); |
| 1079 | 1076 |
| 1080 std::unique_ptr<UserGestureIndicator> gestureIndicator; | 1077 std::unique_ptr<UserGestureIndicator> gestureIndicator; |
| 1081 | 1078 |
| 1082 if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToke
n) | 1079 if (m_frame->localFrameRoot()->eventHandler().m_lastMouseDownUserGestureToke
n) |
| 1083 gestureIndicator = wrapUnique(new UserGestureIndicator(m_frame->localFra
meRoot()->eventHandler().m_lastMouseDownUserGestureToken.release())); | 1080 gestureIndicator = wrapUnique(new UserGestureIndicator(m_frame->localFra
meRoot()->eventHandler().m_lastMouseDownUserGestureToken.release())); |
| 1084 else | 1081 else |
| 1085 gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcess
ingUserGesture)); | 1082 gestureIndicator = wrapUnique(new UserGestureIndicator(DefinitelyProcess
ingUserGesture)); |
| 1086 | 1083 |
| 1087 #if OS(WIN) | 1084 if (RuntimeEnabledFeatures::middleClickAutoscrollEnabled()) { |
| 1088 if (Page* page = m_frame->page()) | 1085 if (Page* page = m_frame->page()) |
| 1089 page->autoscrollController().handleMouseReleaseForPanScrolling(m_frame,
mouseEvent); | 1086 page->autoscrollController().handleMouseReleaseForMiddleClickAutoscr
oll(m_frame, mouseEvent); |
| 1090 #endif | 1087 } |
| 1091 | 1088 |
| 1092 m_mousePressed = false; | 1089 m_mousePressed = false; |
| 1093 setLastKnownMousePosition(mouseEvent); | 1090 setLastKnownMousePosition(mouseEvent); |
| 1094 | 1091 |
| 1095 if (m_svgPan) { | 1092 if (m_svgPan) { |
| 1096 m_svgPan = false; | 1093 m_svgPan = false; |
| 1097 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro
otFrameToContents(m_lastKnownMousePosition)); | 1094 m_frame->document()->accessSVGExtensions().updatePan(m_frame->view()->ro
otFrameToContents(m_lastKnownMousePosition)); |
| 1098 return WebInputEventResult::HandledSuppressed; | 1095 return WebInputEventResult::HandledSuppressed; |
| 1099 } | 1096 } |
| 1100 | 1097 |
| (...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2561 | 2558 |
| 2562 FrameHost* EventHandler::frameHost() const | 2559 FrameHost* EventHandler::frameHost() const |
| 2563 { | 2560 { |
| 2564 if (!m_frame->page()) | 2561 if (!m_frame->page()) |
| 2565 return nullptr; | 2562 return nullptr; |
| 2566 | 2563 |
| 2567 return &m_frame->page()->frameHost(); | 2564 return &m_frame->page()->frameHost(); |
| 2568 } | 2565 } |
| 2569 | 2566 |
| 2570 } // namespace blink | 2567 } // namespace blink |
| OLD | NEW |