Index: chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm |
diff --git a/chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm b/chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm |
index 293855b8e9a0a4e18c0fdb9c4576e88e892cc20b..add4c4ce42360bd6c4659bcc04a0911802545f09 100644 |
--- a/chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm |
+++ b/chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm |
@@ -24,6 +24,11 @@ const int kRoundedCornerSize = 3; |
const int kButtonPadding = 8; |
const int kIconAndTextPadding = 5; |
+// Square of a distance that user needs to move the mouse in order to start the |
+// drag. Threshold is needed to differentiate drags from attempts to click the |
+// titlebar with a twitch of the mouse pointer. |
+const int kDragThreasholdSquared = 9; |
jennb
2011/11/17 23:45:40
typo: Threshold
What's the logic behind using the
Dmitry Titov
2011/11/18 00:15:11
I'm computing a distance and don't want to do sqrt
|
+ |
// Used to implement TestingAPI |
static NSEvent* MakeMouseEvent(NSEventType type, |
NSPoint point, |
@@ -317,6 +322,7 @@ static NSEvent* MakeMouseEvent(NSEventType type, |
- (void)mouseDown:(NSEvent*)event { |
dragState_ = PANEL_DRAG_CAN_START; |
+ dragStartLocation_ = [event locationInWindow]; |
} |
- (void)mouseUp:(NSEvent*)event { |
@@ -326,6 +332,12 @@ static NSEvent* MakeMouseEvent(NSEventType type, |
[controller_ onTitlebarMouseClicked]; |
} |
+- (BOOL)overDragThreshold:(NSPoint)mouseLocation { |
jennb
2011/11/17 23:45:40
exceedsDragThreshold? I'm not sure what overDragTh
Dmitry Titov
2011/11/18 00:15:11
Done.
|
+ float deltaX = dragStartLocation_.x - mouseLocation.x; |
+ float deltaY = dragStartLocation_.y - mouseLocation.y; |
+ return deltaX*deltaX + deltaY*deltaY > kDragThreasholdSquared; |
jennb
2011/11/17 23:45:40
Please use parens rather than dropping the spacing
Dmitry Titov
2011/11/18 00:15:11
Done.
|
+} |
+ |
- (void)mouseDragged:(NSEvent*)event { |
// In addition to events needed to control the drag operation, fetch the right |
// mouse click events and key down events and ignore them, to prevent their |
@@ -345,8 +357,12 @@ static NSEvent* MakeMouseEvent(NSEventType type, |
switch ([event type]) { |
case NSLeftMouseDragged: |
- if (dragState_ == PANEL_DRAG_CAN_START) |
- [self startDrag]; |
+ if (dragState_ == PANEL_DRAG_CAN_START) { |
+ if ([self overDragThreshold:[event locationInWindow]]) |
jennb
2011/11/17 23:45:40
nit: How about reversing this conditional to make
Dmitry Titov
2011/11/18 00:15:11
Done.
|
+ [self startDrag]; |
+ else |
+ return; // Don't start real drag yet. |
+ } |
[self dragWithDeltaX:[event deltaX]]; |
break; |
@@ -358,6 +374,10 @@ static NSEvent* MakeMouseEvent(NSEventType type, |
break; |
case NSLeftMouseUp: |
+ if (dragState_ == PANEL_DRAG_CAN_START) { // Drag didn't really start. |
+ [self mouseUp:event]; |
+ return; |
jennb
2011/11/17 23:45:40
nit: I want to drop this return and add else claus
Dmitry Titov
2011/11/18 00:15:11
Done.
|
+ } |
[self endDrag:NO]; |
keepGoing = NO; |
break; |