Index: ui/views/widget/native_widget_mac.mm |
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm |
index e64961a26d689b28b11a9ece1d086a4d79807d6d..2c9ad3ef520b316201442d43c0399c4dd8c459c0 100644 |
--- a/ui/views/widget/native_widget_mac.mm |
+++ b/ui/views/widget/native_widget_mac.mm |
@@ -292,13 +292,30 @@ void NativeWidgetMac::InitModalType(ui::ModalType modal_type) { |
} |
gfx::Rect NativeWidgetMac::GetWindowBoundsInScreen() const { |
- return gfx::ScreenRectFromNSRect([GetNativeWindow() frame]); |
+ // -[NSWindow frame] doesn't update during a window drag. This is not what |
+ // toolkit-views expects, so ask the window server directly. |
+ // |
+ // Note: Moving the window using the window server is asynchronous, and it can |
+ // continue sending the frame updates (using NSWindowMovedEventType event) |
+ // even after the mouse button is released. |
+ NSRect frame_rect = [GetNativeWindow() frame]; |
+ if (bridge_->IsRunMoveLoopActive()) |
+ frame_rect = bridge_->WindowServerFrame(); |
+ return gfx::ScreenRectFromNSRect(frame_rect); |
} |
gfx::Rect NativeWidgetMac::GetClientAreaBoundsInScreen() const { |
NSWindow* window = GetNativeWindow(); |
- return gfx::ScreenRectFromNSRect( |
- [window contentRectForFrameRect:[window frame]]); |
+ NSRect frame_rect = [window frame]; |
+ // -[NSWindow frame] doesn't update during a window drag. This is not what |
+ // toolkit-views expects, so ask the window server directly. |
+ // |
+ // Note: Moving the window using the window server is asynchronous, and it can |
+ // continue sending the frame updates (using NSWindowMovedEventType event) |
+ // even after the mouse button is released. |
+ if (bridge_->IsRunMoveLoopActive()) |
+ frame_rect = bridge_->WindowServerFrame(); |
+ return gfx::ScreenRectFromNSRect([window contentRectForFrameRect:frame_rect]); |
} |
gfx::Rect NativeWidgetMac::GetRestoredBounds() const { |
@@ -546,12 +563,15 @@ Widget::MoveLoopResult NativeWidgetMac::RunMoveLoop( |
const gfx::Vector2d& drag_offset, |
Widget::MoveLoopSource source, |
Widget::MoveLoopEscapeBehavior escape_behavior) { |
- NOTIMPLEMENTED(); |
- return Widget::MOVE_LOOP_CANCELED; |
+ if (!bridge_) |
+ return Widget::MOVE_LOOP_CANCELED; |
+ |
+ return bridge_->RunMoveLoop(drag_offset); |
} |
void NativeWidgetMac::EndMoveLoop() { |
- NOTIMPLEMENTED(); |
+ if (bridge_) |
+ bridge_->EndMoveLoop(); |
} |
void NativeWidgetMac::SetVisibilityChangedAnimationsEnabled(bool value) { |