Add support for spawning windows outside the app

This commit is contained in:
david-swift 2024-04-11 20:17:25 +02:00
parent d63dec3c6b
commit 8b27a08764
2 changed files with 19 additions and 3 deletions

View File

@ -41,6 +41,14 @@ extension App {
/// The application's entry point.
public static func main() {
let app = setupApp()
app.run()
}
/// Initialize and get the GTUI app.
///
/// To run the app, call the ``GTUIApp/run()`` function.
public static func setupApp() -> GTUIApp {
var appInstance = self.init()
appInstance.app = GTUIApp(appInstance.id) { appInstance }
GTUIApp.updateHandlers.append { force in
@ -57,7 +65,7 @@ extension App {
}
}
GTUIApp.appID = appInstance.id
appInstance.app.run()
return appInstance.app
}
}

View File

@ -48,8 +48,16 @@ public class GTUIApp {
}
/// Run the application.
public func run() {
let data = ViewStorage.SignalData { self.onActivate() }
/// - Parameters:
/// - automaticSetup: Whether the initial windows should be added.
/// - manualSetup: A closure that is executed in the main loop.
public func run(automaticSetup: Bool = true, manualSetup: @escaping () -> Void = { }) {
let data = ViewStorage.SignalData {
if automaticSetup {
self.onActivate()
}
manualSetup()
}
fields["run"] = data
g_signal_connect_data(
pointer?.cast(),