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:
@@ -1,7 +1,17 @@
|
|||||||
{
|
{
|
||||||
"fill" : {
|
"fill-specializations" : [
|
||||||
|
{
|
||||||
|
"value" : {
|
||||||
"automatic-gradient" : "display-p3:0.21900,0.30045,0.61471,1.00000"
|
"automatic-gradient" : "display-p3:0.21900,0.30045,0.61471,1.00000"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"appearance" : "dark",
|
||||||
|
"value" : {
|
||||||
|
"automatic-gradient" : "display-p3:0.12445,0.17422,0.36459,1.00000"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"groups" : [
|
"groups" : [
|
||||||
{
|
{
|
||||||
"layers" : [
|
"layers" : [
|
||||||
|
|||||||
@@ -84,6 +84,39 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"settings.display.dockIcon" : {
|
||||||
|
"extractionState" : "stale",
|
||||||
|
"localizations" : {
|
||||||
|
"de" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Symbol im Dock anzeigen"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"en" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Show icon in the Dock"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"settings.display.dockIcon.hint" : {
|
||||||
|
"localizations" : {
|
||||||
|
"de" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Standardmäßig aus. Onyx lebt in der Notch und in der Menüleiste und hat kein Hauptfenster — im Dock wäre es ein Symbol, das beim Anklicken nichts öffnet, und es stünde im Programmumschalter zwischen den Programmen, mit denen du arbeitest."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"en" : {
|
||||||
|
"stringUnit" : {
|
||||||
|
"state" : "translated",
|
||||||
|
"value" : "Off by default. Onyx lives in the notch and the menu bar and has no main window — in the Dock it would be an icon that opens nothing, and it would sit in the app switcher among the apps you actually work with."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"settings.display.hint" : {
|
"settings.display.hint" : {
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"de" : {
|
"de" : {
|
||||||
@@ -168,6 +201,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"settings.permissions.calendar.why" : {
|
"settings.permissions.calendar.why" : {
|
||||||
|
"extractionState" : "stale",
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"de" : {
|
"de" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
@@ -218,6 +252,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"settings.permissions.location.why" : {
|
"settings.permissions.location.why" : {
|
||||||
|
"extractionState" : "stale",
|
||||||
"localizations" : {
|
"localizations" : {
|
||||||
"de" : {
|
"de" : {
|
||||||
"stringUnit" : {
|
"stringUnit" : {
|
||||||
@@ -485,38 +520,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"settings.display.dockIcon": {
|
|
||||||
"localizations": {
|
|
||||||
"de": {
|
|
||||||
"stringUnit": {
|
|
||||||
"state": "translated",
|
|
||||||
"value": "Symbol im Dock anzeigen"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"en": {
|
|
||||||
"stringUnit": {
|
|
||||||
"state": "translated",
|
|
||||||
"value": "Show icon in the Dock"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"settings.display.dockIcon.hint": {
|
|
||||||
"localizations": {
|
|
||||||
"de": {
|
|
||||||
"stringUnit": {
|
|
||||||
"state": "translated",
|
|
||||||
"value": "Standardmäßig aus. Onyx lebt in der Notch und in der Menüleiste und hat kein Hauptfenster — im Dock wäre es ein Symbol, das beim Anklicken nichts öffnet, und es stünde im Programmumschalter zwischen den Programmen, mit denen du arbeitest."
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"en": {
|
|
||||||
"stringUnit": {
|
|
||||||
"state": "translated",
|
|
||||||
"value": "Off by default. Onyx lives in the notch and the menu bar and has no main window — in the Dock it would be an icon that opens nothing, and it would sit in the app switcher among the apps you actually work with."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version" : "1.0"
|
"version" : "1.0"
|
||||||
|
|||||||
@@ -20,9 +20,22 @@ final class SettingsWindowController: NSObject, NSWindowDelegate {
|
|||||||
/// Muss außerhalb der View liegen, damit ein erneutes Öffnen den Reiter setzen kann.
|
/// Muss außerhalb der View liegen, damit ein erneutes Öffnen den Reiter setzen kann.
|
||||||
private var selectedTab: SettingsTab = .widgets
|
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,
|
func show(model: AppModel, calendarModel: CalendarModel, weatherModel: WeatherModel,
|
||||||
tab: SettingsTab = .widgets) {
|
tab: SettingsTab = .widgets) {
|
||||||
selectedTab = tab
|
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 {
|
if window == nil {
|
||||||
let hosting = NSHostingController(
|
let hosting = NSHostingController(
|
||||||
@@ -52,8 +65,11 @@ final class SettingsWindowController: NSObject, NSWindowDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func windowWillClose(_ notification: Notification) {
|
func windowWillClose(_ notification: Notification) {
|
||||||
// Zurück in den Hintergrund: Onyx hat sonst weiter den Fokus, obwohl
|
// Zurück in den Hintergrund — es sei denn, der Dock-Eintrag ist
|
||||||
// kein Fenster mehr offen ist.
|
// ausdrücklich gewünscht.
|
||||||
|
if !keepsDockIcon {
|
||||||
|
NSApp.setActivationPolicy(.accessory)
|
||||||
|
}
|
||||||
NSApp.hide(nil)
|
NSApp.hide(nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user