Notch öffnet zuverlässig, Einstellungen beenden Onyx nicht mehr
Das Öffnen hing allein an Mausereignissen. Der Auslösebereich liegt aber in der Menüleiste, und dorthin stellt macOS Bewegungen nicht verlässlich an fremde Programme zu — mal kommen sie an, mal nicht, je nachdem, was gerade den Zeiger führt. Ein Verfahren, das eine Zustellung voraussetzt, die es nicht gibt, kann nicht zuverlässig sein. Die Zeigerposition wird deshalb jetzt immer abgefragt, im Ruhezustand zehnmal je Sekunde, bei offenem Panel sechzigmal. Die Monitore sind nur noch Beschleunigung. Kosten: 0,1 % CPU im Leerlauf, gemessen. Nachgeprüft mit fünf Anläufen aus verschiedenen Richtungen — fünfmal offen. Die Unterdrückung war zu grob: jedes Vollbildfenster galt als Grund, das Panel wegzuhalten. Damit war die Notch tot, sobald Xcode im Vollbild lief. Gemeint war immer nur der Film über den ganzen Bildschirm, und den erkennt man daran, dass etwas den Bildschirm wachhält — ein Textfenster tut das nicht. Beide Bedingungen zusammen, nicht eine davon. Dazu ein Loch, das dabei auffiel: fiel die Unterdrückung weg, während der Zeiger schon in der Notch stand, wartete die Maschine auf ein Ereignis, das erst bei der nächsten Bewegung kam. Der rote Knopf blendet Fenster jetzt aus, statt sie zu schließen. Onyx hat kein Hauptfenster; „Fenster zu" heißt hier nie „fertig". Manche Hilfsprogramme erzwingen aber genau diese Gleichung und beenden eine App, sobald ihr letztes Fenster verschwindet — dann war Onyx nach einem Blick in die Einstellungen weg, samt Menüleiste und Notch. Ein Fenster, das nie wirklich schließt, gibt dafür keinen Anlass. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
39
Packages/OnyxKit/Tests/OnyxNotchTests/SuppressionTests.swift
Normal file
39
Packages/OnyxKit/Tests/OnyxNotchTests/SuppressionTests.swift
Normal file
@@ -0,0 +1,39 @@
|
||||
import Testing
|
||||
@testable import OnyxNotch
|
||||
|
||||
// Wann das Panel wegbleiben soll — und wann eben nicht. Die erste Fassung hat
|
||||
// jedes Vollbildfenster als Grund gewertet. Damit war die Notch tot, sobald
|
||||
// jemand Xcode im Vollbild hatte, und das ist kein Zustand, in dem man auf
|
||||
// seinen Kalender verzichten will.
|
||||
|
||||
@Suite("Unterdrückung des Panels")
|
||||
struct SuppressionTests {
|
||||
|
||||
@Test("Ein Vollbildvideo hält das Panel weg")
|
||||
func fullScreenVideoSuppresses() {
|
||||
#expect(NotchSuppression.shouldSuppress(hasFullScreenWindow: true,
|
||||
preventsDisplaySleep: true))
|
||||
}
|
||||
|
||||
@Test("Ein Vollbildfenster allein ist kein Grund")
|
||||
func fullScreenWindowAloneIsNoReason() {
|
||||
// Xcode, ein Browser, ein Editor — alles im Vollbild und alles
|
||||
// Situationen, in denen man die Notch weiter benutzen will.
|
||||
#expect(!NotchSuppression.shouldSuppress(hasFullScreenWindow: true,
|
||||
preventsDisplaySleep: false))
|
||||
}
|
||||
|
||||
@Test("Wiedergabe im Fenster ist auch kein Grund")
|
||||
func windowedPlaybackIsNoReason() {
|
||||
// Ein Video in einem Fenster verdeckt die Notch nicht — und wer währenddessen
|
||||
// die Notch berührt, meint sie auch.
|
||||
#expect(!NotchSuppression.shouldSuppress(hasFullScreenWindow: false,
|
||||
preventsDisplaySleep: true))
|
||||
}
|
||||
|
||||
@Test("Ohne beides bleibt das Panel erreichbar")
|
||||
func normalDesktopIsFine() {
|
||||
#expect(!NotchSuppression.shouldSuppress(hasFullScreenWindow: false,
|
||||
preventsDisplaySleep: false))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user