blob: 03076b848b25f6e5a894b6a4ff9a9f9c0ebb1876 [file] [log] [blame]
// 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