114 lines
3.1 KiB
Plaintext
114 lines
3.1 KiB
Plaintext
// Copyright (c) 2013 The Chromium Embedded Framework Authors.
|
|
// Portions 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>
|
|
|
|
#include "cefsimple/simple_app.h"
|
|
#include "cefsimple/simple_handler.h"
|
|
#include "cefsimple/util.h"
|
|
#include "include/cef_application_mac.h"
|
|
|
|
// Provide the CefAppProtocol implementation required by CEF.
|
|
@interface SimpleApplication : NSApplication<CefAppProtocol> {
|
|
@private
|
|
BOOL handlingSendEvent_;
|
|
}
|
|
@end
|
|
|
|
@implementation SimpleApplication
|
|
- (BOOL)isHandlingSendEvent {
|
|
return handlingSendEvent_;
|
|
}
|
|
|
|
- (void)setHandlingSendEvent:(BOOL)handlingSendEvent {
|
|
handlingSendEvent_ = handlingSendEvent;
|
|
}
|
|
|
|
- (void)sendEvent:(NSEvent*)event {
|
|
CefScopedSendingEvent sendingEventScoper;
|
|
[super sendEvent:event];
|
|
}
|
|
@end
|
|
|
|
|
|
// Receives notifications from the application.
|
|
@interface SimpleAppDelegate : NSObject
|
|
- (void)createApp:(id)object;
|
|
@end
|
|
|
|
@implementation SimpleAppDelegate
|
|
|
|
// Create the application on the UI thread.
|
|
- (void)createApp:(id)object {
|
|
[NSApplication sharedApplication];
|
|
[NSBundle loadNibNamed:@"MainMenu" owner:NSApp];
|
|
|
|
// Set the delegate for application events.
|
|
[NSApp setDelegate:self];
|
|
}
|
|
|
|
// Called when the application's Quit menu item is selected.
|
|
- (NSApplicationTerminateReply)applicationShouldTerminate:
|
|
(NSApplication *)sender {
|
|
// Request that all browser windows close.
|
|
if (SimpleHandler* handler = SimpleHandler::GetInstance())
|
|
handler->CloseAllBrowsers(false);
|
|
|
|
// Cancel the termination. The application will exit after all windows have
|
|
// closed.
|
|
return NSTerminateCancel;
|
|
}
|
|
|
|
// Sent immediately before the application terminates. This signal should not
|
|
// be called because we cancel the termination.
|
|
- (void)applicationWillTerminate:(NSNotification *)aNotification {
|
|
ASSERT(false); // Not reached.
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
// Entry point function for the browser process.
|
|
int main(int argc, char* argv[]) {
|
|
// Provide CEF with command-line arguments.
|
|
CefMainArgs main_args(argc, argv);
|
|
|
|
// SimpleApp implements application-level callbacks. It will create the first
|
|
// browser instance in OnContextInitialized() after CEF has initialized.
|
|
CefRefPtr<SimpleApp> app(new SimpleApp);
|
|
|
|
// Initialize the AutoRelease pool.
|
|
NSAutoreleasePool* autopool = [[NSAutoreleasePool alloc] init];
|
|
|
|
// Initialize the SimpleApplication instance.
|
|
[SimpleApplication sharedApplication];
|
|
|
|
// Specify CEF global settings here.
|
|
CefSettings settings;
|
|
|
|
// Initialize CEF for the browser process.
|
|
CefInitialize(main_args, settings, app.get(), NULL);
|
|
|
|
// Create the application delegate.
|
|
NSObject* delegate = [[SimpleAppDelegate alloc] init];
|
|
[delegate performSelectorOnMainThread:@selector(createApp:) withObject:nil
|
|
waitUntilDone:NO];
|
|
|
|
// Run the CEF message loop. This will block until CefQuitMessageLoop() is
|
|
// called.
|
|
CefRunMessageLoop();
|
|
|
|
// Shut down CEF.
|
|
CefShutdown();
|
|
|
|
// Release the delegate.
|
|
[delegate release];
|
|
|
|
// Release the AutoRelease pool.
|
|
[autopool release];
|
|
|
|
return 0;
|
|
}
|