summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2011-05-11 20:53:37 +0100
committerKristian Monsen <kristianm@google.com>2011-05-16 13:54:48 +0100
commit21d179b334e59e9a3bfcaed4c4430bef1bc5759d (patch)
tree64e2bb6da27af6a5c93ca34f6051584aafbfcb9e /chrome/browser/ui/cocoa/confirm_quit_panel_controller.mm
parent0c63f00edd6ed0482fd5cbcea937ca088baf7858 (diff)
downloadexternal_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.mm85
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