| Index: chrome/browser/chrome_application_mac.mm
|
| ===================================================================
|
| --- chrome/browser/chrome_application_mac.mm (revision 0)
|
| +++ chrome/browser/chrome_application_mac.mm (revision 0)
|
| @@ -0,0 +1,61 @@
|
| +// Copyright (c) 2009 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 "chrome/browser/chrome_application_mac.h"
|
| +
|
| +@implementation CrApplication
|
| +
|
| +// -terminate: is the entry point for orderly "quit" operations in Cocoa.
|
| +// This includes the application menu's quit menu item and keyboard
|
| +// equivalent, the application's dock icon menu's quit menu item, "quit" (not
|
| +// "force quit") in the Activity Monitor, and quits triggered by user logout
|
| +// and system restart and shutdown.
|
| +//
|
| +// The default NSApplication -terminate: implementation will end the process
|
| +// by calling exit(), and thus never leave the main run loop. This is
|
| +// unsuitable for Chrome's purposes. Chrome depends on leaving the main
|
| +// run loop to perform a proper orderly shutdown. This design is ingrained
|
| +// in the application and the assumptions that its code makes, and is
|
| +// entirely reasonable and works well on other platforms, but it's not
|
| +// compatible with the standard Cocoa quit sequence. Quits originated from
|
| +// within the application can be redirected to not use -terminate:, but
|
| +// quits from elsewhere cannot be.
|
| +//
|
| +// To allow the Cocoa-based Chrome to support the standard Cocoa -terminate:
|
| +// interface, and allow all quits to cause Chrome to shut down properly
|
| +// regardless of their origin, -terminate: is overriden. The custom
|
| +// -terminate: does not end the application with exit(). Instead, it simply
|
| +// returns after posting the normal NSApplicationWillTerminateNotification
|
| +// notification. The application is responsible for exiting on its own in
|
| +// whatever way it deems appropriate. In Chrome's case, the main run loop will
|
| +// end and the applicaton will exit by returning from main().
|
| +//
|
| +// This implementation of -terminate: is scaled back and is not as
|
| +// fully-featured as the implementation in NSApplication, nor is it a direct
|
| +// drop-in replacement -terminate: in most applications. It is
|
| +// purpose-specific to Chrome.
|
| +- (void)terminate:(id)sender {
|
| + NSApplicationTerminateReply shouldTerminate = NSTerminateNow;
|
| + SEL selector = @selector(applicationShouldTerminate:);
|
| + if ([[self delegate] respondsToSelector:selector])
|
| + shouldTerminate = [[self delegate] applicationShouldTerminate:self];
|
| +
|
| + // If shouldTerminate is NSTerminateLater, the application is expected to
|
| + // call -replyToApplicationShouldTerminate: when it knows whether or not it
|
| + // should terminate. If the argument is YES,
|
| + // -replyToApplicationShouldTerminate: will call -terminate:. This will
|
| + // result in another call to the delegate's -applicationShouldTerminate:,
|
| + // which would be expected to return NSTerminateNow at that point.
|
| + if (shouldTerminate != NSTerminateNow)
|
| + return;
|
| +
|
| + [[NSNotificationCenter defaultCenter]
|
| + postNotificationName:NSApplicationWillTerminateNotification
|
| + object:self];
|
| +
|
| + // Return, don't exit. The application is responsible for exiting on its
|
| + // own.
|
| +}
|
| +
|
| +@end
|
|
|
| Property changes on: chrome/browser/chrome_application_mac.mm
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|