| Flutter macOS Embedder |

FlutterAppDelegate.mm
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterAppDelegate.h"
6 #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterAppDelegate_Internal.h"
7
8 #import <AppKit/AppKit.h>
9
10 #include "flutter/fml/logging.h"
11 #import "flutter/shell/platform/darwin/macos/framework/Headers/FlutterAppLifecycleDelegate.h"
12 #import "flutter/shell/platform/darwin/macos/framework/Source/FlutterAppLifecycleDelegate_Internal.h"
13 #include "flutter/shell/platform/embedder/embedder.h"
14
15 @interface FlutterAppDelegate ()
16
17 /**
18 * Returns the display name of the application as set in the Info.plist.
19 */
20 - (NSString*)applicationName;
21
22 @property(nonatomic) FlutterAppLifecycleRegistrar* lifecycleRegistrar;
23 @end
24
25 @implementation FlutterAppDelegate
26
27 - (instancetype)init {
28 if (self = [super init]) {
29 _terminationHandler = nil;
30 _lifecycleRegistrar = [[FlutterAppLifecycleRegistrar alloc] init];
31 }
32 return self;
33 }
34
35 - (void)applicationWillFinishLaunching:(NSNotification*)notification {
36 // Update UI elements to match the application name.
37 NSString* applicationName = [self applicationName];
38 _mainFlutterWindow.title = applicationName;
39 for (NSMenuItem* menuItem in _applicationMenu.itemArray) {
40 menuItem.title = [menuItem.title stringByReplacingOccurrencesOfString:@"APP_NAME"
41 withString:applicationName];
42 }
43 }
44
45 #pragma mark - Delegate handling
46
47 - (void)addApplicationLifecycleDelegate:(NSObject<FlutterAppLifecycleDelegate>*)delegate {
48 [self.lifecycleRegistrar addDelegate:delegate];
49 }
50
51 - (void)removeApplicationLifecycleDelegate:(NSObject<FlutterAppLifecycleDelegate>*)delegate {
52 [self.lifecycleRegistrar removeDelegate:delegate];
53 }
54
55 #pragma mark Private Methods
56
57 - (NSString*)applicationName {
58 NSString* applicationName =
59 [NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
60 if (!applicationName) {
61 applicationName = [NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleName"];
62 }
63 return applicationName;
64 }
65
66 #pragma mark NSApplicationDelegate
67
68 - (void)application:(NSApplication*)application openURLs:(NSArray<NSURL*>*)urls {
69 for (NSObject<FlutterAppLifecycleDelegate>* delegate in self.lifecycleRegistrar.delegates) {
70 if ([delegate respondsToSelector:@selector(handleOpenURLs:)] &&
71 [delegate handleOpenURLs:urls]) {
72 return;
73 }
74 }
75 }
76
77 - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication* _Nonnull)sender {
78 // If the framework has already told us to terminate, terminate immediately.
79 if ([self terminationHandler] == nil || [[self terminationHandler] shouldTerminate]) {
80 return NSTerminateNow;
81 }
82
83 // Send a termination request to the framework.
84 FlutterEngineTerminationHandler* terminationHandler = [self terminationHandler];
85 [terminationHandler requestApplicationTermination:sender
86 exitType:kFlutterAppExitTypeCancelable
87 result:nil];
88
89 // Cancel termination to allow the framework to handle the request asynchronously. When the
90 // termination request returns from the app, if termination is desired, this method will be
91 // reinvoked with self.terminationHandler.shouldTerminate set to YES.
92 return NSTerminateCancel;
93 }
94
95 @end
FlutterAppDelegate_Internal.h
FlutterAppLifecycleRegistrar
Definition: FlutterAppLifecycleDelegate.h:126
FlutterAppLifecycleDelegate-p
Definition: FlutterAppLifecycleDelegate.h:21
-[FlutterAppLifecycleDelegate-p handleOpenURLs:]
BOOL handleOpenURLs:(NSArray< NSURL * > *urls)
FlutterAppDelegate
Definition: FlutterAppDelegate.h:54
FlutterAppDelegate.h
FlutterAppLifecycleDelegate_Internal.h
-[FlutterEngineTerminationHandler requestApplicationTermination:exitType:result:]
void requestApplicationTermination:exitType:result:(NSApplication *sender,[exitType] FlutterAppExitType type,[result] nullable FlutterResult result)
FlutterEngineTerminationHandler
Definition: FlutterEngine.mm:180
FlutterAppLifecycleDelegate.h