ui/app,cmd/gio: move running of main from driver to GioAppDelegate

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-08-05 15:38:34 +02:00
parent 2d6111e31a
commit 8472bbc78b
3 changed files with 11 additions and 7 deletions
-3
View File
@@ -139,11 +139,8 @@ func exeIOS(tmpDir, target, app string, bi *buildInfo) error {
const mainmSrc = `@import UIKit; const mainmSrc = `@import UIKit;
@import Gio; @import Gio;
void gio_runMain(void);
int main(int argc, char * argv[]) { int main(int argc, char * argv[]) {
@autoreleasepool { @autoreleasepool {
gio_runMain();
return UIApplicationMain(argc, argv, nil, NSStringFromClass([GioAppDelegate class])); return UIApplicationMain(argc, argv, nil, NSStringFromClass([GioAppDelegate class]));
} }
}` }`
+2
View File
@@ -34,6 +34,8 @@ static void redraw(CFTypeRef viewRef, BOOL sync) {
@implementation GioAppDelegate @implementation GioAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
gio_runMain();
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
GioViewController *controller = [[GioViewController alloc] initWithNibName:nil bundle:nil]; GioViewController *controller = [[GioViewController alloc] initWithNibName:nil bundle:nil];
controller.screen = self.window.screen; controller.screen = self.window.screen;
+9 -4
View File
@@ -7,16 +7,21 @@ package app
// library mode. To make Gio programs simpler and uniform, we'll // library mode. To make Gio programs simpler and uniform, we'll
// link to the main function here and call it from Java. // link to the main function here and call it from Java.
import _ "unsafe" // for go:linkname import (
"sync"
_ "unsafe" // for go:linkname
)
//go:linkname mainMain main.main //go:linkname mainMain main.main
func mainMain() func mainMain()
var runMainOnce sync.Once
func runMain() { func runMain() {
go func() { runMainOnce.Do(func() {
// Indirect call, since the linker does not know the address of main when // Indirect call, since the linker does not know the address of main when
// laying down this package. // laying down this package.
fn := mainMain fn := mainMain
fn() go fn()
}() })
} }