secretive/Sources/Secretive/Controllers/DockVisibilityController.swift
2026-01-21 01:30:13 +05:30

38 lines
1016 B
Swift

import AppKit
import Observation
@MainActor protocol DockVisibilityControllerProtocol: Observable, Sendable {
var isDockIconVisible: Bool { get }
func showDockIcon()
func hideDockIcon()
func updateVisibility(hasRunSetup: Bool, hasOpenWindows: Bool)
}
@Observable @MainActor final class DockVisibilityController: DockVisibilityControllerProtocol {
private(set) var isDockIconVisible: Bool = true
nonisolated init() {}
func showDockIcon() {
guard !isDockIconVisible else { return }
NSApp.setActivationPolicy(.regular)
isDockIconVisible = true
NSApp.activate(ignoringOtherApps: true)
}
func hideDockIcon() {
guard isDockIconVisible else { return }
NSApp.setActivationPolicy(.accessory)
isDockIconVisible = false
}
func updateVisibility(hasRunSetup: Bool, hasOpenWindows: Bool) {
if !hasRunSetup || hasOpenWindows {
showDockIcon()
} else {
hideDockIcon()
}
}
}