Ich habe eine NSWindow
, die ich möchte es vor allem haben (jede App des Computers, Vollbild-Anwendungen, etc ..). Auch wenn ich in eine Hintergrund-App klicke, kann die NSWindow
nicht in den Hintergrund gehen. Und der NSWindow
muss dem Benutzerbildschirm folgen, wenn der Benutzer beispielsweise den Desktop auf desktop2 umstellt usw. Wie kann ich das tun?
Danke!Wie erzwinge ich, dass ein NSWindow vor jeder App angezeigt wird? Sogar Vollbild-Anwendungen
Antwort
Wenn Sie nicht mit den Vollbildfenstern anderer Anwendungen sichtbar sein müssen, ist es nicht schwer.
Erstens, um vor allem anderen zu bleiben, nur setLevel: mit NSFloatingWindowLevel oder höher. Experimentieren Sie mit den verschiedenen Werten, um zu sehen, welches für Ihre Bedürfnisse geeignet erscheint.
Als nächstes bleiben Sie in Front, auch wenn der Benutzer Spaces ändert, möglicherweise einschließlich Exposé/Mission Control, setCollectionBehavior: mit dem entsprechenden Flagpaar oder verwenden Sie die entsprechenden Spaces- und Exposé-Einstellungen im Attribute Inspector, wenn Sie erstellen das Fenster in der Feder. Mit "Alle Bereiche verbinden" oder "Zu aktivem Bereich wechseln" können Sie sicherstellen, dass Sie in jedem Bereich auf eine etwas andere Weise sichtbar bleiben. Wahrscheinlich möchten Sie, dass Exposé auf Stationär oder möglicherweise auch auf Transient gesetzt wird. Versuchen Sie wieder beide Wege und sehen Sie.
Lion wird jedoch sowohl All-Spaces als auch Fenster zum Verschieben in aktiven Space ausblenden, wenn der Benutzer zu einem Vollbildbereich oder Dashboard oder Launchpad wechselt. Und wenn Sie zusehen, werden Sie sehen, dass dies für jeden der drei Fälle auf unterschiedliche Weise geschieht. Und das macht Snow Leopard ein wenig anders und Mountain Lion.
Wenn Sie dieses letzte Problem lösen wollen, brauchen Sie ein wenig Hacker-und verschiedene Formen von Hacker für jeden Fall und für jede Betriebssystemversion. Der grundlegende Trick besteht darin, die versteckten Benachrichtigungen abzufangen und sich zur richtigen Zeit einzufangen.
Sie sollten Ihre info.plist ändern und das Flag "Application is Agent" auf YES setzen. Das Fenster eines Agenten kann vor Vollbildfenstern angezeigt werden.
Vielen Dank! Ich habe den Level auf NSFloatingWindowLevel, Spaces: Can Join All Spaces und Exposé: Transient Behavior gesetzt und es funktioniert genau so, wie ich es wollte! der NSWindow folgt mir überall hin. Vielen Dank! –
Ein letzter Gedanke: Es könnte geeigneter sein, einen NSPanel anstelle eines NSWindow zu verwenden (und möglicherweise setFloatingPanel zu verwenden: YES anstelle von setLevel: NSFloatingWindowLevel). – abarnert