mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
* Re-land "Support multiple shells in a single process. (#4932)" This reverts commit 723c7d01439da4261bc836075fb55651ce9e7f03.
81 lines
2.8 KiB
Plaintext
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
|