From 8b27a08764cf7e9ed09909298961e00ef2763b0e Mon Sep 17 00:00:00 2001 From: david-swift Date: Thu, 11 Apr 2024 20:17:25 +0200 Subject: [PATCH] Add support for spawning windows outside the app --- Sources/Adwaita/Model/User Interface/App/App.swift | 10 +++++++++- .../Adwaita/Model/User Interface/App/GTUIApp.swift | 12 ++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/Sources/Adwaita/Model/User Interface/App/App.swift b/Sources/Adwaita/Model/User Interface/App/App.swift index 754114c..977d596 100644 --- a/Sources/Adwaita/Model/User Interface/App/App.swift +++ b/Sources/Adwaita/Model/User Interface/App/App.swift @@ -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 } } diff --git a/Sources/Adwaita/Model/User Interface/App/GTUIApp.swift b/Sources/Adwaita/Model/User Interface/App/GTUIApp.swift index b8c9a19..853c1c8 100644 --- a/Sources/Adwaita/Model/User Interface/App/GTUIApp.swift +++ b/Sources/Adwaita/Model/User Interface/App/GTUIApp.swift @@ -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(),