diff options
author | Kristian Monsen <kristianm@google.com> | 2011-05-11 20:53:37 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2011-05-16 13:54:48 +0100 |
commit | 21d179b334e59e9a3bfcaed4c4430bef1bc5759d (patch) | |
tree | 64e2bb6da27af6a5c93ca34f6051584aafbfcb9e /chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm | |
parent | 0c63f00edd6ed0482fd5cbcea937ca088baf7858 (diff) | |
download | external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.zip external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.gz external_chromium-21d179b334e59e9a3bfcaed4c4430bef1bc5759d.tar.bz2 |
Merge Chromium at 10.0.621.0: Initial merge by git.
Change-Id: I070cc91c608dfa4a968a5a54c173260765ac8097
Diffstat (limited to 'chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm')
-rw-r--r-- | chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm b/chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm new file mode 100644 index 0000000..548b83a --- /dev/null +++ b/chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm @@ -0,0 +1,85 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import <Cocoa/Cocoa.h> +#import <QuartzCore/QuartzCore.h> + +#include "base/logging.h" +#include "base/mac_util.h" +#include "base/scoped_nsobject.h" +#import "chrome/browser/ui/cocoa/confirm_quit_panel_controller.h" + +@interface ConfirmQuitPanelController (Private) +- (id)initInternal; +- (void)animateFadeOut; +@end + +ConfirmQuitPanelController* g_confirmQuitPanelController = nil; + +@implementation ConfirmQuitPanelController + ++ (ConfirmQuitPanelController*)sharedController { + if (!g_confirmQuitPanelController) { + g_confirmQuitPanelController = + [[ConfirmQuitPanelController alloc] initInternal]; + } + return g_confirmQuitPanelController; +} + +- (id)initInternal { + NSString* nibPath = + [mac_util::MainAppBundle() pathForResource:@"ConfirmQuitPanel" + ofType:@"nib"]; + if ((self = [super initWithWindowNibPath:nibPath owner:self])) { + } + return self; +} + +- (void)awakeFromNib { + DCHECK([self window]); + DCHECK_EQ(self, [[self window] delegate]); +} + +- (void)windowWillClose:(NSNotification*)notif { + // Release all animations because CAAnimation retains its delegate (self), + // which will cause a retain cycle. Break it! + [[self window] setAnimations:[NSDictionary dictionary]]; + g_confirmQuitPanelController = nil; + [self autorelease]; +} + +- (void)showWindow:(id)sender { + // If a panel that is fading out is going to be reused here, make sure it + // does not get released when the animation finishes. + scoped_nsobject<ConfirmQuitPanelController> stayAlive([self retain]); + [[self window] setAnimations:[NSDictionary dictionary]]; + [[self window] center]; + [[self window] setAlphaValue:1.0]; + [super showWindow:sender]; +} + +- (void)dismissPanel { + [self performSelector:@selector(animateFadeOut) + withObject:nil + afterDelay:1.0]; +} + +- (void)animateFadeOut { + NSWindow* window = [self window]; + scoped_nsobject<CAAnimation> animation( + [[window animationForKey:@"alphaValue"] copy]); + [animation setDelegate:self]; + [animation setDuration:0.2]; + NSMutableDictionary* dictionary = + [NSMutableDictionary dictionaryWithDictionary:[window animations]]; + [dictionary setObject:animation forKey:@"alphaValue"]; + [window setAnimations:dictionary]; + [[window animator] setAlphaValue:0.0]; +} + +- (void)animationDidStop:(CAAnimation*)theAnimation finished:(BOOL)finished { + [self close]; +} + +@end |