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 b1e67e8c5da32d7b029525e910ca24ec9524f40e..1adaec16d1d304ede65f860bf2f5f9c1519a8597 100644 |
--- a/ui/views/widget/native_widget_mac.mm |
+++ b/ui/views/widget/native_widget_mac.mm |
@@ -8,12 +8,9 @@ |
#include <utility> |
-#import "base/mac/bind_objc_block.h" |
#include "base/mac/foundation_util.h" |
#include "base/mac/scoped_nsobject.h" |
#include "base/strings/sys_string_conversions.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#import "ui/base/cocoa/constrained_window/constrained_window_animation.h" |
#import "ui/base/cocoa/window_size_constants.h" |
#include "ui/gfx/font_list.h" |
#import "ui/gfx/mac/coordinate_conversion.h" |
@@ -30,18 +27,6 @@ |
#include "ui/views/widget/widget_delegate.h" |
#include "ui/views/window/native_frame_view.h" |
-// Self-owning animation delegate that starts a hide animation, then calls |
-// -[NSWindow close] when the animation ends, releasing itself. |
-@interface ViewsNSWindowCloseAnimator : NSObject<NSAnimationDelegate> { |
- @private |
- base::scoped_nsobject<NSWindow> window_; |
- base::scoped_nsobject<NSAnimation> animation_; |
-} |
- |
-+ (void)closeWindowWithAnimation:(NSWindow*)window; |
- |
-@end |
- |
namespace views { |
namespace { |
@@ -95,11 +80,6 @@ BridgedNativeWidget* NativeWidgetMac::GetBridgeForNativeWindow( |
return nullptr; // Not created by NativeWidgetMac. |
} |
-bool NativeWidgetMac::IsWindowModalSheet() const { |
- return GetWidget()->widget_delegate()->GetModalType() == |
- ui::MODAL_TYPE_WINDOW; |
-} |
- |
void NativeWidgetMac::OnWindowWillClose() { |
// Note: If closed via CloseNow(), |bridge_| will already be reset. If closed |
// by the user, or via Close() and a RunLoop, notify observers while |bridge_| |
@@ -344,38 +324,7 @@ void NativeWidgetMac::Close() { |
if (!bridge_) |
return; |
- NSWindow* window = GetNativeWindow(); |
- if (IsWindowModalSheet()) { |
- // Sheets can't be closed normally. This starts the sheet closing. Once the |
- // sheet has finished animating, it will call sheetDidEnd: on the parent |
- // window's delegate. Note it still needs to be asynchronous, since code |
- // calling Widget::Close() doesn't expect things to be deleted upon return. |
- [NSApp performSelector:@selector(endSheet:) withObject:window afterDelay:0]; |
- return; |
- } |
- |
- // For other modal types, animate the close. |
- if (delegate_->IsModal()) { |
- [ViewsNSWindowCloseAnimator closeWindowWithAnimation:window]; |
- return; |
- } |
- |
- // Clear the view early to suppress repaints. |
- bridge_->SetRootView(NULL); |
- |
- // Widget::Close() ensures [Non]ClientView::CanClose() returns true, so there |
- // is no need to call the NSWindow or its delegate's -windowShouldClose: |
- // implementation in the manner of -[NSWindow performClose:]. But, |
- // like -performClose:, first remove the window from AppKit's display |
- // list to avoid crashes like http://crbug.com/156101. |
- [window orderOut:nil]; |
- |
- // Many tests assume that base::RunLoop().RunUntilIdle() is always sufficient |
- // to execute a close. However, in rare cases, -performSelector:..afterDelay:0 |
- // does not do this. So post a regular task. |
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, base::BindBlock(^{ |
- [window close]; |
- })); |
+ bridge_->CloseAsynchronously(); |
} |
void NativeWidgetMac::CloseNow() { |
@@ -743,29 +692,3 @@ gfx::NativeView NativeWidgetPrivate::GetGlobalCapture( |
} // namespace internal |
} // namespace views |
- |
-@implementation ViewsNSWindowCloseAnimator |
- |
-- (id)initWithWindow:(NSWindow*)window { |
- if ((self = [super init])) { |
- window_.reset([window retain]); |
- animation_.reset( |
- [[ConstrainedWindowAnimationHide alloc] initWithWindow:window]); |
- [animation_ setDelegate:self]; |
- [animation_ setAnimationBlockingMode:NSAnimationNonblocking]; |
- [animation_ startAnimation]; |
- } |
- return self; |
-} |
- |
-+ (void)closeWindowWithAnimation:(NSWindow*)window { |
- [[ViewsNSWindowCloseAnimator alloc] initWithWindow:window]; |
-} |
- |
-- (void)animationDidEnd:(NSAnimation*)animation { |
- [window_ close]; |
- [animation_ setDelegate:nil]; |
- [self release]; |
-} |
- |
-@end |