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

Unified Diff: third_party/WebKit/Source/core/input/MouseEventManager.cpp

Issue 2401503002: Align drag threshold across content types. (Closed)
Patch Set: Addressed nits. Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/input/MouseEventManager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/input/MouseEventManager.cpp
diff --git a/third_party/WebKit/Source/core/input/MouseEventManager.cpp b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
index 69e5522b9c03c87d9e4f5272453d16c18fc9c7e9..a89c3f03879be29859f570bb574141cfa8eb0ff2 100644
--- a/third_party/WebKit/Source/core/input/MouseEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/MouseEventManager.cpp
@@ -59,20 +59,17 @@ PlatformMouseEvent mouseEventWithRegion(Node* node,
// during a scroll.
const double kFakeMouseMoveInterval = 0.1;
+// TODO(crbug.com/653490): Read these values from the OS.
#if OS(MACOSX)
+const int kDragThresholdX = 3;
+const int kDragThresholdY = 3;
const double kTextDragDelay = 0.15;
#else
+const int kDragThresholdX = 4;
+const int kDragThresholdY = 4;
const double kTextDragDelay = 0.0;
#endif
-// The link drag hysteresis is much larger than the others because there
-// needs to be enough space to cancel the link press without starting a link
-// drag, and because dragging links is rare.
-const int kLinkDragHysteresis = 40;
-const int kImageDragHysteresis = 5;
-const int kTextDragHysteresis = 3;
-const int kGeneralDragHysteresis = 3;
-
} // namespace
enum class DragInitiator { Mouse, Touch };
@@ -782,11 +779,11 @@ bool MouseEventManager::handleDrag(const MouseEventWithHitTestResults& event,
m_frame->view()->setCursor(pointerCursor());
if (initiator == DragInitiator::Mouse &&
- !dragHysteresisExceeded(event.event().position()))
+ !dragThresholdExceeded(event.event().position()))
return true;
- // Once we're past the hysteresis point, we don't want to treat this gesture
- // as a click
+ // Once we're past the drag threshold, we don't want to treat this gesture as
+ // a click.
invalidateClick();
if (!tryStartDrag(event)) {
@@ -930,7 +927,7 @@ DragState& MouseEventManager::dragState() {
return state;
}
-bool MouseEventManager::dragHysteresisExceeded(
+bool MouseEventManager::dragThresholdExceeded(
const IntPoint& dragLocationInRootFrame) const {
FrameView* view = m_frame->view();
if (!view)
@@ -938,24 +935,12 @@ bool MouseEventManager::dragHysteresisExceeded(
IntPoint dragLocation = view->rootFrameToContents(dragLocationInRootFrame);
IntSize delta = dragLocation - m_mouseDownPos;
- int threshold = kGeneralDragHysteresis;
- switch (dragState().m_dragType) {
- case DragSourceActionSelection:
- threshold = kTextDragHysteresis;
- break;
- case DragSourceActionImage:
- threshold = kImageDragHysteresis;
- break;
- case DragSourceActionLink:
- threshold = kLinkDragHysteresis;
- break;
- case DragSourceActionDHTML:
- break;
- case DragSourceActionNone:
- NOTREACHED();
- }
+ // WebKit's drag thresholds depend on the type of object being dragged. If we
+ // want to revive that behavior, we can multiply the threshold constants with
+ // a number based on dragState().m_dragType.
- return abs(delta.width()) >= threshold || abs(delta.height()) >= threshold;
+ return abs(delta.width()) >= kDragThresholdX ||
+ abs(delta.height()) >= kDragThresholdY;
}
void MouseEventManager::clearDragHeuristicState() {
« no previous file with comments | « third_party/WebKit/Source/core/input/MouseEventManager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698