Chromium Code Reviews| 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..ad2fc959c1471099d970198aa51babfd5f167411 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; |
| +// 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 kDragThreshold = 3; |
| + |
| // 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)exceedsDragThreshold:(NSPoint)mouseLocation { |
| + float deltaX = dragStartLocation_.x - mouseLocation.x; |
| + float deltaY = dragStartLocation_.y - mouseLocation.y; |
| + return deltaX > kDragThreshold || deltaY > kDragThreshold; |
|
jennb
2011/11/18 00:36:55
So much simpler! Shaves a few cycles, too. :-D
|
| +} |
| + |
| - (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,11 @@ static NSEvent* MakeMouseEvent(NSEventType type, |
| switch ([event type]) { |
| case NSLeftMouseDragged: |
| - if (dragState_ == PANEL_DRAG_CAN_START) |
| + if (dragState_ == PANEL_DRAG_CAN_START) { |
| + if (![self exceedsDragThreshold:[event locationInWindow]]) |
| + return; // Don't start real drag yet. |
| [self startDrag]; |
| + } |
| [self dragWithDeltaX:[event deltaX]]; |
| break; |
| @@ -358,7 +373,10 @@ static NSEvent* MakeMouseEvent(NSEventType type, |
| break; |
| case NSLeftMouseUp: |
| - [self endDrag:NO]; |
| + if (dragState_ == PANEL_DRAG_CAN_START) |
| + [self mouseUp:event]; // Drag didn't really start, minimize instead. |
| + else |
| + [self endDrag:NO]; |
| keepGoing = NO; |
| break; |