Dock-Eintrag nur solange ein Fenster offen ist
Im Hintergrund gehört Onyx nicht in den Dock — es hat kein Fenster, das ein Klick öffnen könnte. Mit sichtbarem Einstellungsfenster ist das Gegenteil richtig: als reine .accessory-App lässt sich das Fenster weder über den Dock noch über ⌘-Tab zurückholen, wenn es hinter etwas anderes rutscht. Deshalb wird beim Öffnen auf .regular geschaltet und beim Schließen zurück — außer der Dock-Eintrag ist in den Einstellungen ausdrücklich gewünscht. Das generische weiße Symbol im Dock kam nicht aus dem Bundle: CFBundleIconName, CFBundleIconFile, AppIcon.icns und der Assets-Katalog waren alle in Ordnung. Es war der Icon-Cache von Launch Services, der die App von den vielen Starts her kannte, als es noch gar kein Icon gab. Neu registriert und Cache verworfen.
This commit is contained in:
@@ -20,9 +20,22 @@ final class SettingsWindowController: NSObject, NSWindowDelegate {
|
||||
/// Muss außerhalb der View liegen, damit ein erneutes Öffnen den Reiter setzen kann.
|
||||
private var selectedTab: SettingsTab = .widgets
|
||||
|
||||
/// Ob Onyx dauerhaft im Dock steht. Bestimmt, wohin nach dem Schließen
|
||||
/// zurückgeschaltet wird.
|
||||
var keepsDockIcon = false
|
||||
|
||||
func show(model: AppModel, calendarModel: CalendarModel, weatherModel: WeatherModel,
|
||||
tab: SettingsTab = .widgets) {
|
||||
selectedTab = tab
|
||||
keepsDockIcon = model.showsDockIcon
|
||||
|
||||
// Solange ein Fenster offen ist, gehört Onyx in den Dock.
|
||||
//
|
||||
// Als reine `.accessory`-App hat sie dort keinen Eintrag — das ist im
|
||||
// Hintergrund richtig, aber mit sichtbarem Fenster verwirrend: das
|
||||
// Fenster lässt sich dann weder über den Dock noch über ⌘-Tab
|
||||
// zurückholen, wenn es hinter etwas anderes rutscht.
|
||||
NSApp.setActivationPolicy(.regular)
|
||||
|
||||
if window == nil {
|
||||
let hosting = NSHostingController(
|
||||
@@ -52,8 +65,11 @@ final class SettingsWindowController: NSObject, NSWindowDelegate {
|
||||
}
|
||||
|
||||
func windowWillClose(_ notification: Notification) {
|
||||
// Zurück in den Hintergrund: Onyx hat sonst weiter den Fokus, obwohl
|
||||
// kein Fenster mehr offen ist.
|
||||
// Zurück in den Hintergrund — es sei denn, der Dock-Eintrag ist
|
||||
// ausdrücklich gewünscht.
|
||||
if !keepsDockIcon {
|
||||
NSApp.setActivationPolicy(.accessory)
|
||||
}
|
||||
NSApp.hide(nil)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user