@@ -45,25 +45,12 @@ var gitBranch string
45
45
46
46
func main () {
47
47
defer misc .LogPanic ()
48
- launcherFlags , fatalError := initializeEnvironment ()
48
+ launcherFlags , envErr := initializeEnvironment ()
49
49
ctx , cancelFunc := context .WithCancel (context .Background ())
50
50
51
- if fatalError == nil {
52
- go launcher .LauncherMain (ctx , launcherFlags )
53
- } else {
54
- go gui .ReportFatalError (fatalError , launcherFlags )
55
- }
56
-
57
- // On MacOS, only the first thread created by the OS is allowed to be the main GUI thread.
58
- // Also, on Windows, OLE code needs to run on the main thread, which we rely on when creating shortcuts.
59
- runtime .LockOSThread ()
51
+ go runLauncher (ctx , envErr , launcherFlags )
52
+ runGUI (ctx , cancelFunc , launcherFlags , envErr == nil )
60
53
61
- err := gui .Main (ctx , cancelFunc , resources .LauncherConfig .BrandingName , ! launcherFlags .Uninstall && fatalError == nil )
62
- if err != nil {
63
- log .Fatalf ("gui.Main() failed: %v\n " , err )
64
- }
65
-
66
- log .Info ("End of main()." )
67
54
log .Exit (0 )
68
55
}
69
56
@@ -80,6 +67,28 @@ func initializeEnvironment() (*flags.LauncherFlags, error) {
80
67
return launcherFlags , misc .NewNestedErrorFromFirstCause (argumentError , flagError , pathError , placesError )
81
68
}
82
69
70
+ func runLauncher (ctx context.Context , fatalError error , launcherFlags * flags.LauncherFlags ) {
71
+ gui .WaitUntilReady ()
72
+ defer gui .Quit ()
73
+ if fatalError != nil {
74
+ gui .PanicInformatively (fatalError , launcherFlags )
75
+ }
76
+ defer gui .HandlePanic (launcherFlags )
77
+ launcher .LauncherMain (ctx , launcherFlags )
78
+ }
79
+
80
+ func runGUI (ctx context.Context , cancelFunc context.CancelFunc , launcherFlags * flags.LauncherFlags , showMainWindow bool ) {
81
+ // On MacOS, only the first thread created by the OS is allowed to be the main GUI thread.
82
+ // Also, on Windows, OLE code needs to run on the main thread, which we rely on when creating shortcuts.
83
+ runtime .LockOSThread ()
84
+
85
+ err := gui .Main (ctx , cancelFunc , resources .LauncherConfig .BrandingName , ! launcherFlags .Uninstall && showMainWindow )
86
+ if err != nil {
87
+ log .Fatalf ("gui.Main() failed: %v\n " , err )
88
+ }
89
+ log .Info ("runGUI() terminated." )
90
+ }
91
+
83
92
func parseEnvironment () (launcherFlags * flags.LauncherFlags , argumentError , flagError , pathError , evalError , placesError error ) {
84
93
launcherFlags = & flags.LauncherFlags {}
85
94
if len (os .Args ) < 1 {
0 commit comments