prole/prole.app/Sources/AppDelegate.swift
2025-11-16 21:54:01 -08:00

36 lines
1.6 KiB
Swift

import AppKit
final class AppDelegate: NSObject, NSApplicationDelegate {
private var overlayWindowController: OverlayWindowController!
private var hotKeyManager: HotKeyManager!
private var serviceChecker: ServiceChecker!
func applicationDidFinishLaunching(_ notification: Notification) {
NSApp.setActivationPolicy(.accessory) // visible menu-less app
serviceChecker = ServiceChecker()
overlayWindowController = OverlayWindowController(serviceChecker: serviceChecker)
overlayWindowController.showIfMenuBarVisible()
hotKeyManager = HotKeyManager()
hotKeyManager.registerGlobalHotKey(modifiers: [.command, .option, .shift], key: .p) { [weak self] in
self?.overlayWindowController.showContextMenu()
}
// Observe screen/space/menu bar visibility changes
DistributedNotificationCenter.default().addObserver(self, selector: #selector(handleConfigChange), name: NSNotification.Name("com.apple.HIToolbox.inputSourceChanged"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleConfigChange), name: NSApplication.didChangeScreenParametersNotification, object: nil)
NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(spaceChanged), name: NSWorkspace.activeSpaceDidChangeNotification, object: nil)
serviceChecker.start()
}
@objc private func handleConfigChange() {
overlayWindowController.recomputeFrameAndVisibility()
}
@objc private func spaceChanged() {
overlayWindowController.recomputeFrameAndVisibility()
}
}