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

Side by Side Diff: Source/core/page/EventHandler.cpp

Issue 720693003: Remove EventHandler::m_didStartDrag. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/page/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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 static const double minimumActiveInterval = 0.15; 133 static const double minimumActiveInterval = 0.15;
134 134
135 #if OS(MACOSX) 135 #if OS(MACOSX)
136 static const double TextDragDelay = 0.15; 136 static const double TextDragDelay = 0.15;
137 #else 137 #else
138 static const double TextDragDelay = 0.0; 138 static const double TextDragDelay = 0.0;
139 #endif 139 #endif
140 140
141 enum NoCursorChangeType { NoCursorChange }; 141 enum NoCursorChangeType { NoCursorChange };
142 142
143 enum class DragInitiator { Mouse, Touch };
144
143 class OptionalCursor { 145 class OptionalCursor {
144 public: 146 public:
145 OptionalCursor(NoCursorChangeType) : m_isCursorChange(false) { } 147 OptionalCursor(NoCursorChangeType) : m_isCursorChange(false) { }
146 OptionalCursor(const Cursor& cursor) : m_isCursorChange(true), m_cursor(curs or) { } 148 OptionalCursor(const Cursor& cursor) : m_isCursorChange(true), m_cursor(curs or) { }
147 149
148 bool isCursorChange() const { return m_isCursorChange; } 150 bool isCursorChange() const { return m_isCursorChange; }
149 const Cursor& cursor() const { ASSERT(m_isCursorChange); return m_cursor; } 151 const Cursor& cursor() const { ASSERT(m_isCursorChange); return m_cursor; }
150 152
151 private: 153 private:
152 bool m_isCursorChange; 154 bool m_isCursorChange;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 , m_eventHandlerWillResetCapturingMouseEventsNode(0) 216 , m_eventHandlerWillResetCapturingMouseEventsNode(0)
215 , m_clickCount(0) 217 , m_clickCount(0)
216 , m_shouldOnlyFireDragOverEvent(false) 218 , m_shouldOnlyFireDragOverEvent(false)
217 , m_mousePositionIsUnknown(true) 219 , m_mousePositionIsUnknown(true)
218 , m_mouseDownTimestamp(0) 220 , m_mouseDownTimestamp(0)
219 , m_widgetIsLatched(false) 221 , m_widgetIsLatched(false)
220 , m_touchPressed(false) 222 , m_touchPressed(false)
221 , m_scrollGestureHandlingNode(nullptr) 223 , m_scrollGestureHandlingNode(nullptr)
222 , m_lastGestureScrollOverWidget(false) 224 , m_lastGestureScrollOverWidget(false)
223 , m_maxMouseMovedDuration(0) 225 , m_maxMouseMovedDuration(0)
224 , m_didStartDrag(false)
225 , m_longTapShouldInvokeContextMenu(false) 226 , m_longTapShouldInvokeContextMenu(false)
226 , m_activeIntervalTimer(this, &EventHandler::activeIntervalTimerFired) 227 , m_activeIntervalTimer(this, &EventHandler::activeIntervalTimerFired)
227 , m_lastShowPressTimestamp(0) 228 , m_lastShowPressTimestamp(0)
228 { 229 {
229 } 230 }
230 231
231 EventHandler::~EventHandler() 232 EventHandler::~EventHandler()
232 { 233 {
233 ASSERT(!m_fakeMouseMoveEventTimer.isActive()); 234 ASSERT(!m_fakeMouseMoveEventTimer.isActive());
234 } 235 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 m_latchedWheelEventNode = nullptr; 290 m_latchedWheelEventNode = nullptr;
290 m_previousWheelScrolledNode = nullptr; 291 m_previousWheelScrolledNode = nullptr;
291 m_targetForTouchID.clear(); 292 m_targetForTouchID.clear();
292 m_touchSequenceDocument.clear(); 293 m_touchSequenceDocument.clear();
293 m_touchSequenceUserGestureToken.clear(); 294 m_touchSequenceUserGestureToken.clear();
294 m_scrollGestureHandlingNode = nullptr; 295 m_scrollGestureHandlingNode = nullptr;
295 m_lastGestureScrollOverWidget = false; 296 m_lastGestureScrollOverWidget = false;
296 m_previousGestureScrolledNode = nullptr; 297 m_previousGestureScrolledNode = nullptr;
297 m_scrollbarHandlingScrollGesture = nullptr; 298 m_scrollbarHandlingScrollGesture = nullptr;
298 m_maxMouseMovedDuration = 0; 299 m_maxMouseMovedDuration = 0;
299 m_didStartDrag = false;
300 m_touchPressed = false; 300 m_touchPressed = false;
301 m_mouseDownMayStartSelect = false; 301 m_mouseDownMayStartSelect = false;
302 m_mouseDownMayStartDrag = false; 302 m_mouseDownMayStartDrag = false;
303 m_lastShowPressTimestamp = 0; 303 m_lastShowPressTimestamp = 0;
304 m_lastDeferredTapElement = nullptr; 304 m_lastDeferredTapElement = nullptr;
305 m_eventHandlerWillResetCapturingMouseEventsNode = false; 305 m_eventHandlerWillResetCapturingMouseEventsNode = false;
306 m_mouseDownWasSingleClickInSelection = false; 306 m_mouseDownWasSingleClickInSelection = false;
307 m_selectionInitiationState = HaveNotStartedSelection; 307 m_selectionInitiationState = HaveNotStartedSelection;
308 m_mouseDownMayStartAutoscroll = false; 308 m_mouseDownMayStartAutoscroll = false;
309 m_svgPan = false; 309 m_svgPan = false;
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
646 return swallowEvent; 646 return swallowEvent;
647 } 647 }
648 648
649 bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e vent) 649 bool EventHandler::handleMouseDraggedEvent(const MouseEventWithHitTestResults& e vent)
650 { 650 {
651 TRACE_EVENT0("blink", "EventHandler::handleMouseDraggedEvent"); 651 TRACE_EVENT0("blink", "EventHandler::handleMouseDraggedEvent");
652 652
653 if (!m_mousePressed) 653 if (!m_mousePressed)
654 return false; 654 return false;
655 655
656 if (handleDrag(event, ShouldCheckDragHysteresis)) 656 if (handleDrag(event, DragInitiator::Mouse))
657 return true; 657 return true;
658 658
659 Node* targetNode = event.innerNode(); 659 Node* targetNode = event.innerNode();
660 if (event.event().button() != LeftButton || !targetNode) 660 if (event.event().button() != LeftButton || !targetNode)
661 return false; 661 return false;
662 662
663 RenderObject* renderer = targetNode->renderer(); 663 RenderObject* renderer = targetNode->renderer();
664 if (!renderer) { 664 if (!renderer) {
665 Node* parent = NodeRenderingTraversal::parent(targetNode); 665 Node* parent = NodeRenderingTraversal::parent(targetNode);
666 if (!parent) 666 if (!parent)
(...skipping 1640 matching lines...) Expand 10 before | Expand all | Expand 10 after
2307 m_longTapShouldInvokeContextMenu = false; 2307 m_longTapShouldInvokeContextMenu = false;
2308 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_ frame->view()) { 2308 if (m_frame->settings() && m_frame->settings()->touchDragDropEnabled() && m_ frame->view()) {
2309 PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MousePressed, 1, 2309 PlatformMouseEvent mouseDownEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MousePressed, 1,
2310 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey (), gestureEvent.metaKey(), PlatformMouseEvent::FromTouch, WTF::currentTime()); 2310 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey (), gestureEvent.metaKey(), PlatformMouseEvent::FromTouch, WTF::currentTime());
2311 m_mouseDown = mouseDownEvent; 2311 m_mouseDown = mouseDownEvent;
2312 2312
2313 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MouseMoved, 1, 2313 PlatformMouseEvent mouseDragEvent(adjustedPoint, gestureEvent.globalPosi tion(), LeftButton, PlatformEvent::MouseMoved, 1,
2314 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey (), gestureEvent.metaKey(), PlatformMouseEvent::FromTouch, WTF::currentTime()); 2314 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey (), gestureEvent.metaKey(), PlatformMouseEvent::FromTouch, WTF::currentTime());
2315 HitTestRequest request(HitTestRequest::ReadOnly); 2315 HitTestRequest request(HitTestRequest::ReadOnly);
2316 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE vent); 2316 MouseEventWithHitTestResults mev = prepareMouseEvent(request, mouseDragE vent);
2317 m_didStartDrag = false;
2318 m_mouseDownMayStartDrag = true; 2317 m_mouseDownMayStartDrag = true;
2319 dragState().m_dragSrc = nullptr; 2318 dragState().m_dragSrc = nullptr;
2320 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi on()); 2319 m_mouseDownPos = m_frame->view()->windowToContents(mouseDragEvent.positi on());
2321 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view()); 2320 RefPtrWillBeRawPtr<FrameView> protector(m_frame->view());
2322 handleDrag(mev, DontCheckDragHysteresis); 2321 if (handleDrag(mev, DragInitiator::Touch)) {
2323 if (m_didStartDrag) {
2324 m_longTapShouldInvokeContextMenu = true; 2322 m_longTapShouldInvokeContextMenu = true;
2325 return true; 2323 return true;
2326 } 2324 }
2327 } 2325 }
2328 #if OS(ANDROID) 2326 #if OS(ANDROID)
2329 bool shouldLongPressSelectWord = true; 2327 bool shouldLongPressSelectWord = true;
2330 #else 2328 #else
2331 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()- >touchEditingEnabled(); 2329 bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()- >touchEditingEnabled();
2332 #endif 2330 #endif
2333 if (shouldLongPressSelectWord) { 2331 if (shouldLongPressSelectWord) {
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 if (dragState().m_dragSrc && !dragState().m_dragSrc->inDocument()) 3192 if (dragState().m_dragSrc && !dragState().m_dragSrc->inDocument())
3195 dragState().m_dragSrc = rootEditableElement; 3193 dragState().m_dragSrc = rootEditableElement;
3196 } 3194 }
3197 3195
3198 // returns if we should continue "default processing", i.e., whether eventhandle r canceled 3196 // returns if we should continue "default processing", i.e., whether eventhandle r canceled
3199 bool EventHandler::dispatchDragSrcEvent(const AtomicString& eventType, const Pla tformMouseEvent& event) 3197 bool EventHandler::dispatchDragSrcEvent(const AtomicString& eventType, const Pla tformMouseEvent& event)
3200 { 3198 {
3201 return !dispatchDragEvent(eventType, dragState().m_dragSrc.get(), event, dra gState().m_dragDataTransfer.get()); 3199 return !dispatchDragEvent(eventType, dragState().m_dragSrc.get(), event, dra gState().m_dragDataTransfer.get());
3202 } 3200 }
3203 3201
3204 bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event, CheckDr agHysteresis checkDragHysteresis) 3202 bool EventHandler::handleDrag(const MouseEventWithHitTestResults& event, DragIni tiator initiator)
3205 { 3203 {
3206 ASSERT(event.event().type() == PlatformEvent::MouseMoved); 3204 ASSERT(event.event().type() == PlatformEvent::MouseMoved);
3207 // Callers must protect the reference to FrameView, since this function may dispatch DOM 3205 // Callers must protect the reference to FrameView, since this function may dispatch DOM
3208 // events, causing page/FrameView to go away. 3206 // events, causing page/FrameView to go away.
3209 ASSERT(m_frame); 3207 ASSERT(m_frame);
3210 ASSERT(m_frame->view()); 3208 ASSERT(m_frame->view());
3211 if (!m_frame->page()) 3209 if (!m_frame->page())
3212 return false; 3210 return false;
3213 3211
3212 // FIXME: Does this ever get hit??
3214 if (event.event().button() != LeftButton || event.event().type() != Platform Event::MouseMoved) { 3213 if (event.event().button() != LeftButton || event.event().type() != Platform Event::MouseMoved) {
3215 // If we allowed the other side of the bridge to handle a drag 3214 // If we allowed the other side of the bridge to handle a drag
3216 // last time, then m_mousePressed might still be set. So we 3215 // last time, then m_mousePressed might still be set. So we
3217 // clear it now to make sure the next move after a drag 3216 // clear it now to make sure the next move after a drag
3218 // doesn't look like a drag. 3217 // doesn't look like a drag.
3219 m_mousePressed = false; 3218 m_mousePressed = false;
3220 return false; 3219 return false;
3221 } 3220 }
3222 3221
3223 if (m_mouseDownMayStartDrag) { 3222 if (m_mouseDownMayStartDrag) {
3224 HitTestRequest request(HitTestRequest::ReadOnly); 3223 HitTestRequest request(HitTestRequest::ReadOnly);
3225 HitTestResult result(m_mouseDownPos); 3224 HitTestResult result(m_mouseDownPos);
3226 m_frame->contentRenderer()->hitTest(request, result); 3225 m_frame->contentRenderer()->hitTest(request, result);
3227 Node* node = result.innerNode(); 3226 Node* node = result.innerNode();
3228 if (node) { 3227 if (node) {
3229 DragController::SelectionDragPolicy selectionDragPolicy = event.even t().timestamp() - m_mouseDownTimestamp < TextDragDelay 3228 DragController::SelectionDragPolicy selectionDragPolicy = event.even t().timestamp() - m_mouseDownTimestamp < TextDragDelay
3230 ? DragController::DelayedSelectionDragResolution 3229 ? DragController::DelayedSelectionDragResolution
3231 : DragController::ImmediateSelectionDragResolution; 3230 : DragController::ImmediateSelectionDragResolution;
3232 dragState().m_dragSrc = m_frame->page()->dragController().draggableN ode(m_frame, node, m_mouseDownPos, selectionDragPolicy, dragState().m_dragType); 3231 dragState().m_dragSrc = m_frame->page()->dragController().draggableN ode(m_frame, node, m_mouseDownPos, selectionDragPolicy, dragState().m_dragType);
3233 } else { 3232 } else {
3234 dragState().m_dragSrc = nullptr; 3233 dragState().m_dragSrc = nullptr;
3235 } 3234 }
3236 3235
3237 if (!dragState().m_dragSrc) 3236 if (!dragState().m_dragSrc)
3238 m_mouseDownMayStartDrag = false; // no element is draggable 3237 m_mouseDownMayStartDrag = false; // no element is draggable
3239 } 3238 }
3240 3239
3241 if (!m_mouseDownMayStartDrag) 3240 if (!m_mouseDownMayStartDrag)
3242 return !mouseDownMayStartSelect() && !m_mouseDownMayStartAutoscroll; 3241 return initiator == DragInitiator::Mouse && !mouseDownMayStartSelect() & & !m_mouseDownMayStartAutoscroll;
3243 3242
3244 // We are starting a text/image/url drag, so the cursor should be an arrow 3243 // We are starting a text/image/url drag, so the cursor should be an arrow
3245 // FIXME <rdar://7577595>: Custom cursors aren't supported during drag and d rop (default to pointer). 3244 // FIXME <rdar://7577595>: Custom cursors aren't supported during drag and d rop (default to pointer).
3246 m_frame->view()->setCursor(pointerCursor()); 3245 m_frame->view()->setCursor(pointerCursor());
3247 3246
3248 if (checkDragHysteresis == ShouldCheckDragHysteresis && !dragHysteresisExcee ded(event.event().position())) 3247 if (initiator == DragInitiator::Mouse && !dragHysteresisExceeded(event.event ().position()))
3249 return true; 3248 return true;
3250 3249
3251 // Once we're past the hysteresis point, we don't want to treat this gesture as a click 3250 // Once we're past the hysteresis point, we don't want to treat this gesture as a click
3252 invalidateClick(); 3251 invalidateClick();
3253 3252
3254 if (!tryStartDrag(event)) { 3253 if (!tryStartDrag(event)) {
3255 // Something failed to start the drag, clean up. 3254 // Something failed to start the drag, clean up.
3256 clearDragDataTransfer(); 3255 clearDragDataTransfer();
3257 dragState().m_dragSrc = nullptr; 3256 dragState().m_dragSrc = nullptr;
3258 } 3257 }
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3296 // Do that by checking if m_dragSrc is still set. 3295 // Do that by checking if m_dragSrc is still set.
3297 m_mouseDownMayStartDrag = dispatchDragSrcEvent(EventTypeNames::dragstart, m_ mouseDown) 3296 m_mouseDownMayStartDrag = dispatchDragSrcEvent(EventTypeNames::dragstart, m_ mouseDown)
3298 && !m_frame->selection().isInPasswordField() && dragState().m_dragSrc; 3297 && !m_frame->selection().isInPasswordField() && dragState().m_dragSrc;
3299 3298
3300 // Invalidate clipboard here against anymore pasteboard writing for security . The drag 3299 // Invalidate clipboard here against anymore pasteboard writing for security . The drag
3301 // image can still be changed as we drag, but not the pasteboard data. 3300 // image can still be changed as we drag, but not the pasteboard data.
3302 dragState().m_dragDataTransfer->setAccessPolicy(DataTransferImageWritable); 3301 dragState().m_dragDataTransfer->setAccessPolicy(DataTransferImageWritable);
3303 3302
3304 if (m_mouseDownMayStartDrag) { 3303 if (m_mouseDownMayStartDrag) {
3305 // Dispatching the event could cause Page to go away. Make sure it's sti ll valid before trying to use DragController. 3304 // Dispatching the event could cause Page to go away. Make sure it's sti ll valid before trying to use DragController.
3306 m_didStartDrag = m_frame->page() && dragController.startDrag(m_frame, dr agState(), event.event(), m_mouseDownPos); 3305 if (m_frame->page() && dragController.startDrag(m_frame, dragState(), ev ent.event(), m_mouseDownPos))
3307 // FIXME: This seems pretty useless now. The gesture code uses this as a signal for
3308 // whether or not the drag started, but perhaps it can simply use the re turn value from
3309 // handleDrag(), even though it doesn't mean exactly the same thing.
3310 if (m_didStartDrag)
3311 return true; 3306 return true;
3312 // Drag was canned at the last minute - we owe m_dragSrc a DRAGEND event 3307 // Drag was canned at the last minute - we owe m_dragSrc a DRAGEND event
3313 dispatchDragSrcEvent(EventTypeNames::dragend, event.event()); 3308 dispatchDragSrcEvent(EventTypeNames::dragend, event.event());
3314 } 3309 }
3315 3310
3316 return false; 3311 return false;
3317 } 3312 }
3318 3313
3319 bool EventHandler::handleTextInputEvent(const String& text, Event* underlyingEve nt, TextEventInputType inputType) 3314 bool EventHandler::handleTextInputEvent(const String& text, Event* underlyingEve nt, TextEventInputType inputType)
3320 { 3315 {
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
3871 unsigned EventHandler::accessKeyModifiers() 3866 unsigned EventHandler::accessKeyModifiers()
3872 { 3867 {
3873 #if OS(MACOSX) 3868 #if OS(MACOSX)
3874 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; 3869 return PlatformEvent::CtrlKey | PlatformEvent::AltKey;
3875 #else 3870 #else
3876 return PlatformEvent::AltKey; 3871 return PlatformEvent::AltKey;
3877 #endif 3872 #endif
3878 } 3873 }
3879 3874
3880 } // namespace blink 3875 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/page/EventHandler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698