mirror of
https://github.com/dredx/prole.git
synced 2026-09-27 09:04:30 +00:00
37 lines
1.6 KiB
Swift
37 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)
|
|
|
|
// Check status every 30 seconds
|
|
serviceChecker.start(interval: 30)
|
|
}
|
|
|
|
@objc private func handleConfigChange() {
|
|
overlayWindowController.recomputeFrameAndVisibility()
|
|
}
|
|
|
|
@objc private func spaceChanged() {
|
|
overlayWindowController.recomputeFrameAndVisibility()
|
|
}
|
|
}
|