Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(359)

Side by Side Diff: third_party/WebKit/Source/core/input/EventHandler.cpp

Issue 2042333006: Reset drag state variables on mouse up (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Applying the comments Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/input/EventHandler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 { 429 {
430 selectionController().updateSelectionForMouseDrag(m_mousePressNode.get(), m_ dragStartPos, m_lastKnownMousePosition); 430 selectionController().updateSelectionForMouseDrag(m_mousePressNode.get(), m_ dragStartPos, m_lastKnownMousePosition);
431 } 431 }
432 432
433 WebInputEventResult EventHandler::handleMouseReleaseEvent(const MouseEventWithHi tTestResults& event) 433 WebInputEventResult EventHandler::handleMouseReleaseEvent(const MouseEventWithHi tTestResults& event)
434 { 434 {
435 AutoscrollController* controller = m_scrollManager.autoscrollController(); 435 AutoscrollController* controller = m_scrollManager.autoscrollController();
436 if (controller && controller->autoscrollInProgress()) 436 if (controller && controller->autoscrollInProgress())
437 m_scrollManager.stopAutoscroll(); 437 m_scrollManager.stopAutoscroll();
438 438
439 // Used to prevent mouseMoveEvent from initiating a drag before
440 // the mouse is pressed again.
441 m_mousePressed = false;
442 m_capturesDragging = false;
443 m_mouseDownMayStartDrag = false;
444 m_mouseDownMayStartAutoscroll = false;
445
446 return selectionController().handleMouseReleaseEvent(event, m_dragStartPos) ? WebInputEventResult::HandledSystem : WebInputEventResult::NotHandled; 439 return selectionController().handleMouseReleaseEvent(event, m_dragStartPos) ? WebInputEventResult::HandledSystem : WebInputEventResult::NotHandled;
447 } 440 }
448 441
449 #if OS(WIN) 442 #if OS(WIN)
450 443
451 void EventHandler::startPanScrolling(LayoutObject* layoutObject) 444 void EventHandler::startPanScrolling(LayoutObject* layoutObject)
452 { 445 {
453 if (!layoutObject->isBox()) 446 if (!layoutObject->isBox())
454 return; 447 return;
455 AutoscrollController* controller = m_scrollManager.autoscrollController(); 448 AutoscrollController* controller = m_scrollManager.autoscrollController();
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1205 event->stopPropagation(); 1198 event->stopPropagation();
1206 1199
1207 clickEventResult = toWebInputEventResult(clickTargetNode->dispatchEv ent(event)); 1200 clickEventResult = toWebInputEventResult(clickTargetNode->dispatchEv ent(event));
1208 } 1201 }
1209 } 1202 }
1210 1203
1211 m_scrollManager.clearResizeScrollableArea(false); 1204 m_scrollManager.clearResizeScrollableArea(false);
1212 1205
1213 if (eventResult == WebInputEventResult::NotHandled) 1206 if (eventResult == WebInputEventResult::NotHandled)
1214 eventResult = handleMouseReleaseEvent(mev); 1207 eventResult = handleMouseReleaseEvent(mev);
1208 clearDragHeuristicState();
1215 1209
1216 invalidateClick(); 1210 invalidateClick();
1217 1211
1218 return mergeEventResult(clickEventResult, eventResult); 1212 return mergeEventResult(clickEventResult, eventResult);
1219 } 1213 }
1220 1214
1221 WebInputEventResult EventHandler::dispatchDragEvent(const AtomicString& eventTyp e, Node* dragTarget, const PlatformMouseEvent& event, DataTransfer* dataTransfer ) 1215 WebInputEventResult EventHandler::dispatchDragEvent(const AtomicString& eventTyp e, Node* dragTarget, const PlatformMouseEvent& event, DataTransfer* dataTransfer )
1222 { 1216 {
1223 FrameView* view = m_frame->view(); 1217 FrameView* view = m_frame->view();
1224 1218
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 if (targetIsFrame(m_dragTarget.get(), targetFrame)) { 1376 if (targetIsFrame(m_dragTarget.get(), targetFrame)) {
1383 if (targetFrame) 1377 if (targetFrame)
1384 result = targetFrame->eventHandler().performDragAndDrop(event, dataT ransfer); 1378 result = targetFrame->eventHandler().performDragAndDrop(event, dataT ransfer);
1385 } else if (m_dragTarget.get()) { 1379 } else if (m_dragTarget.get()) {
1386 result = dispatchDragEvent(EventTypeNames::drop, m_dragTarget.get(), eve nt, dataTransfer); 1380 result = dispatchDragEvent(EventTypeNames::drop, m_dragTarget.get(), eve nt, dataTransfer);
1387 } 1381 }
1388 clearDragState(); 1382 clearDragState();
1389 return result; 1383 return result;
1390 } 1384 }
1391 1385
1386 void EventHandler::clearDragHeuristicState()
1387 {
1388 // Used to prevent mouseMoveEvent from initiating a drag before
1389 // the mouse is pressed again.
1390 m_mousePressed = false;
1391 m_capturesDragging = false;
1392 m_mouseDownMayStartDrag = false;
1393 m_mouseDownMayStartAutoscroll = false;
1394 }
1395
1392 void EventHandler::clearDragState() 1396 void EventHandler::clearDragState()
1393 { 1397 {
1394 m_scrollManager.stopAutoscroll(); 1398 m_scrollManager.stopAutoscroll();
1395 m_dragTarget = nullptr; 1399 m_dragTarget = nullptr;
1396 m_capturingMouseEventsNode = nullptr; 1400 m_capturingMouseEventsNode = nullptr;
1397 m_shouldOnlyFireDragOverEvent = false; 1401 m_shouldOnlyFireDragOverEvent = false;
1398 } 1402 }
1399 1403
1400 void EventHandler::setCapturingMouseEventsNode(Node* n) 1404 void EventHandler::setCapturingMouseEventsNode(Node* n)
1401 { 1405 {
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
1867 // because commonAncestor() will exit early if their documents are d ifferent. 1871 // because commonAncestor() will exit early if their documents are d ifferent.
1868 m_clickNode->updateDistribution(); 1872 m_clickNode->updateDistribution();
1869 Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor(* m_clickNode, parentForClickEvent); 1873 Node* clickTargetNode = currentHitTest.innerNode()->commonAncestor(* m_clickNode, parentForClickEvent);
1870 clickEventResult = dispatchMouseEvent(EventTypeNames::click, clickTa rgetNode, gestureEvent.tapCount(), fakeMouseUp); 1874 clickEventResult = dispatchMouseEvent(EventTypeNames::click, clickTa rgetNode, gestureEvent.tapCount(), fakeMouseUp);
1871 } 1875 }
1872 m_clickNode = nullptr; 1876 m_clickNode = nullptr;
1873 } 1877 }
1874 1878
1875 if (mouseUpEventResult == WebInputEventResult::NotHandled) 1879 if (mouseUpEventResult == WebInputEventResult::NotHandled)
1876 mouseUpEventResult = handleMouseReleaseEvent(MouseEventWithHitTestResult s(fakeMouseUp, currentHitTest)); 1880 mouseUpEventResult = handleMouseReleaseEvent(MouseEventWithHitTestResult s(fakeMouseUp, currentHitTest));
1881 clearDragHeuristicState();
1877 1882
1878 WebInputEventResult eventResult = mergeEventResult(mergeEventResult(mouseDow nEventResult, mouseUpEventResult), clickEventResult); 1883 WebInputEventResult eventResult = mergeEventResult(mergeEventResult(mouseDow nEventResult, mouseUpEventResult), clickEventResult);
1879 if (eventResult == WebInputEventResult::NotHandled && tappedNode && m_frame- >page()) { 1884 if (eventResult == WebInputEventResult::NotHandled && tappedNode && m_frame- >page()) {
1880 bool domTreeChanged = preDispatchDomTreeVersion != m_frame->document()-> domTreeVersion(); 1885 bool domTreeChanged = preDispatchDomTreeVersion != m_frame->document()-> domTreeVersion();
1881 bool styleChanged = preDispatchStyleVersion != m_frame->document()->styl eVersion(); 1886 bool styleChanged = preDispatchStyleVersion != m_frame->document()->styl eVersion();
1882 1887
1883 IntPoint tappedPositionInViewport = frameHost()->visualViewport().rootFr ameToViewport(tappedPosition); 1888 IntPoint tappedPositionInViewport = frameHost()->visualViewport().rootFr ameToViewport(tappedPosition);
1884 m_frame->chromeClient().showUnhandledTapUIIfNeeded(tappedPositionInViewp ort, tappedNode, domTreeChanged || styleChanged); 1889 m_frame->chromeClient().showUnhandledTapUIIfNeeded(tappedPositionInViewp ort, tappedNode, domTreeChanged || styleChanged);
1885 } 1890 }
1886 return eventResult; 1891 return eventResult;
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after
2850 2855
2851 FrameHost* EventHandler::frameHost() const 2856 FrameHost* EventHandler::frameHost() const
2852 { 2857 {
2853 if (!m_frame->page()) 2858 if (!m_frame->page())
2854 return nullptr; 2859 return nullptr;
2855 2860
2856 return &m_frame->page()->frameHost(); 2861 return &m_frame->page()->frameHost();
2857 } 2862 }
2858 2863
2859 } // namespace blink 2864 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/input/EventHandler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698