33 lines
1.5 KiB
Swift
33 lines
1.5 KiB
Swift
import Cocoa
|
|
import FlutterMacOS
|
|
|
|
@main
|
|
class AppDelegate: FlutterAppDelegate {
|
|
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
|
|
return true
|
|
}
|
|
|
|
// Esta app se relanza siempre por script (redirect al updater y viceversa),
|
|
// nunca tiene sentido "resumir" la ventana de una sesión anterior. Con esto
|
|
// en `true`, macOS intenta restaurar el estado de ventana guardado al
|
|
// arrancar y, si falla la restauración (visto en el log del sistema:
|
|
// "Unable to find className=(null)"), aplica una heurística que termina
|
|
// interfiriendo con la ventana recién creada antes de que Flutter pinte el
|
|
// primer frame — pantalla negra permanente sin ningún error de Dart.
|
|
override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
|
|
return false
|
|
}
|
|
|
|
// Cuando esta app la lanza soma_pro_updater (vía `open --args`) en vez de
|
|
// Finder/el usuario directamente, la ventana puede quedar creada pero sin
|
|
// volverse la app activa/en primer plano — macOS pausa el render de
|
|
// ventanas no activas para ahorrar batería, y como esta pantalla no tiene
|
|
// animación propia que fuerce un repaint, queda negra para siempre. Forzar
|
|
// la activación acá evita depender de que el proceso que nos lanzó haya
|
|
// completado bien el traspaso de foco.
|
|
override func applicationDidFinishLaunching(_ notification: Notification) {
|
|
super.applicationDidFinishLaunching(notification)
|
|
NSApp.activate(ignoringOtherApps: true)
|
|
}
|
|
}
|