2012-06-05 2 views
5

У меня есть NSWindow, что я хотел бы иметь его перед всем (каждое приложение компьютера, полноэкранные приложения и т. Д.). Даже если я нажму в фоновом приложении, то не удастся перейти на задний план. И NSWindow должен следовать экрану пользователя, если, например, пользователь переключает рабочий стол на рабочий стол2 и так далее ... Как я могу это сделать?
Спасибо!Как заставить NSWindow быть перед каждым приложением? Даже полноэкранные приложения

ответ

9

Если вам не нужно быть видимым с полноэкранными окнами других приложений, это не так сложно.

Прежде всего, чтобы оставаться перед всем остальным, просто установите уровень: с помощью NSFloatingWindowLevel или выше. Поэкспериментируйте с различными значениями, чтобы увидеть, что кажется соответствующим вашим потребностям.

Далее, чтобы оставаться впереди, даже если пользователь меняет пробелы, возможно, включая Exposé/Mission Control, setCollectionBehavior: с соответствующей парой флагов или использовать соответствующие параметры Spaces и Exposé в инспекторе атрибутов, если вы создаете окно в банке. Либо может присоединиться ко всем пространствам, либо перейти в активное пространство, убедитесь, что вы остаетесь видимыми на каждом пространстве несколькими способами. Вероятно, вам захочется, чтобы Exposé установлен на «Стационарный», или, возможно, на переходный период. Опять же, попробуйте в обоих направлениях и посмотрите.

Однако, если пользователь переключится на полноэкранное пространство или на панель мониторинга или панель запуска, Lion скроет как все пробелы, так и окна перехода в активное пространство. И если вы посмотрите, вы увидите, что он делает это по-разному для каждого из трех случаев. И этот Snow Leopard делает что-то по-другому, так же как и Горный Лев.

Если вы хотите решить эту последнюю проблему, вам нужно немного хакеров и разных форм хакерства для каждого случая и для каждой версии ОС. Основной трюк заключается в том, чтобы поймать связанные с шпионами уведомления и показать себя в соответствующее время.

+1

Большое вам спасибо! Я установил уровень NSFloatingWindowLevel, Spaces: Can Join All Spaces и Exposé: Transient Behavior и работает так, как я хотел! NSWindow следит за мной повсюду. Спасибо! –

+0

Последняя мысль: может быть более целесообразно использовать NSPanel вместо NSWindow (и, возможно, использовать setFloatingPanel: YES вместо setLevel: NSFloatingWindowLevel). – abarnert

4

Вы должны изменить свой info.plist и установить для приложения «Агент» значение «ДА». Окно агента может отображаться перед полноэкранными окнами.

Смежные вопросы