| 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 f637494ac95ed9f19e0ef0f0df412e1817f0b593..6b1ba0f3be713933328c1ef779c9f8837ce0cdea 100644
|
| --- a/chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm
|
| +++ b/chrome/browser/ui/panels/panel_titlebar_view_cocoa.mm
|
| @@ -392,7 +392,8 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| - (void)mouseDown:(NSEvent*)event {
|
| if ([controller_ isDraggable]) {
|
| dragState_ = PANEL_DRAG_CAN_START;
|
| - dragStartLocation_ = [event locationInWindow];
|
| + dragStartLocation_ =
|
| + [[self window] convertBaseToScreen:[event locationInWindow]];
|
| }
|
| }
|
|
|
| @@ -404,8 +405,8 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| }
|
|
|
| - (BOOL)exceedsDragThreshold:(NSPoint)mouseLocation {
|
| - float deltaX = dragStartLocation_.x - mouseLocation.x;
|
| - float deltaY = dragStartLocation_.y - mouseLocation.y;
|
| + float deltaX = fabs(dragStartLocation_.x - mouseLocation.x);
|
| + float deltaY = fabs(dragStartLocation_.y - mouseLocation.y);
|
| return deltaX > kDragThreshold || deltaY > kDragThreshold;
|
| }
|
|
|
| @@ -430,15 +431,19 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| dequeue:YES];
|
|
|
| switch ([event type]) {
|
| - case NSLeftMouseDragged:
|
| + case NSLeftMouseDragged: {
|
| + // Get current mouse location in Cocoa's screen coordinates.
|
| + NSPoint mouseLocation =
|
| + [[self window] convertBaseToScreen:[event locationInWindow]];
|
| if (dragState_ == PANEL_DRAG_CAN_START) {
|
| - if (![self exceedsDragThreshold:[event locationInWindow]])
|
| + if (![self exceedsDragThreshold:mouseLocation])
|
| return; // Don't start real drag yet.
|
| - [self startDrag];
|
| + [self startDrag:dragStartLocation_];
|
| }
|
| - [self dragWithDeltaX:[event deltaX]
|
| - deltaY:[event deltaY]];
|
| + DCHECK(dragState_ == PANEL_DRAG_IN_PROGRESS);
|
| + [self drag:mouseLocation];
|
| break;
|
| + }
|
|
|
| case NSKeyUp:
|
| if ([event keyCode] == kVK_Escape) {
|
| @@ -468,10 +473,10 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| }
|
| }
|
|
|
| -- (void)startDrag {
|
| +- (void)startDrag:(NSPoint)mouseLocation {
|
| DCHECK(dragState_ == PANEL_DRAG_CAN_START);
|
| dragState_ = PANEL_DRAG_IN_PROGRESS;
|
| - [controller_ startDrag];
|
| + [controller_ startDrag:mouseLocation];
|
| }
|
|
|
| - (void)endDrag:(BOOL)cancelled {
|
| @@ -480,12 +485,10 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| dragState_ = PANEL_DRAG_SUPPRESSED;
|
| }
|
|
|
| -- (void)dragWithDeltaX:(int)deltaX
|
| - deltaY:(int)deltaY {
|
| +- (void)drag:(NSPoint)mouseLocation {
|
| if (dragState_ != PANEL_DRAG_IN_PROGRESS)
|
| return;
|
| - [controller_ dragWithDeltaX:deltaX
|
| - deltaY:deltaY];
|
| + [controller_ drag:mouseLocation];
|
| }
|
|
|
| - (void)drawAttention {
|
| @@ -569,8 +572,11 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| [[closeButton_ cell] performClick:closeButton_];
|
| }
|
|
|
| -- (void)pressLeftMouseButtonTitlebar {
|
| - NSEvent* event = MakeMouseEvent(NSLeftMouseDown, NSZeroPoint, 0);
|
| +- (void)pressLeftMouseButtonTitlebar:(NSPoint)mouseLocation {
|
| + // Convert from Cocoa's screen coordinates to base coordinates since the mouse
|
| + // event takes base coordinates.
|
| + NSEvent* event = MakeMouseEvent(
|
| + NSLeftMouseDown, [[self window] convertScreenToBase:mouseLocation], 0);
|
| [self mouseDown:event];
|
| }
|
|
|
| @@ -579,12 +585,12 @@ static NSEvent* MakeMouseEvent(NSEventType type,
|
| [self mouseUp:event];
|
| }
|
|
|
| -- (void)dragTitlebarDeltaX:(double)delta_x
|
| - deltaY:(double)delta_y {
|
| +- (void)dragTitlebar:(NSPoint)mouseLocation {
|
| if (dragState_ == PANEL_DRAG_CAN_START)
|
| - [self startDrag];
|
| - [self dragWithDeltaX:delta_x
|
| - deltaY:delta_y];
|
| + [self startDrag:dragStartLocation_];
|
| + // No need to do any conversion since |mouseLocation| is already in Cocoa's
|
| + // screen coordinates.
|
| + [self drag:mouseLocation];
|
| }
|
|
|
| - (void)cancelDragTitlebar {
|
|
|