flutter_flutter/shell/platform/darwin/desktop/flutter_application_delegate.mm
Chinmay Garde 58e84c8bf0
Re-land "Support multiple shells in a single process. (#4932)" (#4998)
* Re-land "Support multiple shells in a single process. (#4932)"

This reverts commit 723c7d01439da4261bc836075fb55651ce9e7f03.
2018-04-13 13:48:15 -07:00

81 lines
2.8 KiB
Plaintext

// Copyright 2017 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/darwin/desktop/flutter_application_delegate.h"
#include "flutter/shell/platform/darwin/desktop/flutter_window.h"
#include <AppKit/AppKit.h>
@implementation FlutterApplicationDelegate
- (void)applicationWillFinishLaunching:(NSNotification*)notification {
[self configureMainMenuBar];
[self onNewFlutterWindow:self];
}
- (void)configureMainMenuBar {
NSMenu* mainMenu = [[[NSMenu alloc] initWithTitle:@"MainMenu"] autorelease];
NSMenuItem* engineItem =
[[[NSMenuItem alloc] initWithTitle:@"Engine" action:NULL keyEquivalent:@""] autorelease];
NSMenu* engineMenu = [[[NSMenu alloc] initWithTitle:@"EngineMenu"] autorelease];
NSMenuItem* newEngineItem = [[[NSMenuItem alloc] initWithTitle:@"New Engine"
action:@selector(onNewFlutterWindow:)
keyEquivalent:@""] autorelease];
newEngineItem.keyEquivalent = @"n";
newEngineItem.keyEquivalentModifierMask = NSCommandKeyMask;
NSMenuItem* shutdownEngineItem =
[[[NSMenuItem alloc] initWithTitle:@"Shutdown Engine"
action:@selector(onShutdownFlutterWindow:)
keyEquivalent:@""] autorelease];
shutdownEngineItem.keyEquivalent = @"w";
shutdownEngineItem.keyEquivalentModifierMask = NSCommandKeyMask;
NSMenuItem* quitItem = [[[NSMenuItem alloc] initWithTitle:@"Quit"
action:@selector(onQuitFlutterApplication:)
keyEquivalent:@""] autorelease];
quitItem.keyEquivalent = @"q";
quitItem.keyEquivalentModifierMask = NSCommandKeyMask;
[mainMenu addItem:engineItem];
[engineItem setSubmenu:engineMenu];
[engineMenu addItem:newEngineItem];
[engineMenu addItem:shutdownEngineItem];
[engineMenu addItem:quitItem];
[NSApplication sharedApplication].mainMenu = mainMenu;
}
- (void)onNewFlutterWindow:(id)sender {
FlutterWindow* window = [[FlutterWindow alloc] init];
[window setReleasedWhenClosed:YES];
NSWindow* currentKeyWindow = [NSApplication sharedApplication].keyWindow;
if (currentKeyWindow == nil) {
[window center];
} else {
[window center];
NSPoint currentWindowFrameOrigin = window.frame.origin;
currentWindowFrameOrigin.x = currentKeyWindow.frame.origin.x + 20;
currentWindowFrameOrigin.y = currentKeyWindow.frame.origin.y - 20;
[window setFrameOrigin:currentWindowFrameOrigin];
}
[window makeKeyAndOrderFront:sender];
}
- (void)onShutdownFlutterWindow:(id)sender {
[[NSApplication sharedApplication].keyWindow close];
}
- (void)onQuitFlutterApplication:(id)sender {
exit(0);
}
@end