| 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 bfde5f6305812b5046c5e364c69df5170d68af90..9b9bb4f183025a411bfe9cbcb6b255e30c008e91 100644
|
| --- a/ui/views/widget/native_widget_mac.mm
|
| +++ b/ui/views/widget/native_widget_mac.mm
|
| @@ -293,13 +293,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 {
|
| @@ -551,12 +568,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) {
|
|
|