NSWindow с NSWindowCollectionBehaviorStationary отображается на панели инструментов. Это ошибка?
Я пытаюсь получить NSWindow
для:
- Быть видимым во всех пространствах
- Быть видимым при показе рабочего стола (нажатием
F11
)
- Не видно в Mission Control/Expose
Следующее делает именно это, но с побочным эффектом:
[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces
| NSWindowCollectionBehaviorStationary ];
При переключении на панель мониторинга в Mac OS X Lion окно остается видимым в одиночку с элементами панели мониторинга на секунду, затем оно скрыто.
Является ли это ожидаемым поведением или ошибкой? Пользователи моего приложения сбивают с толку, чтобы увидеть окно на панели инструментов, прежде чем они исчезнут. Я бы ожидал, что они будут отображаться только на Spaces, а не на панели инструментов.
Ответы
Ответ 1
Я посмотрел http://cocoadev.com/wiki/DontExposeMe поиск обходного пути
ничего действительно не работает, кроме.
self.window.level = kCGDesktopWindowLevel;
теперь возможно DETECT изменения, чтобы разоблачить и установить, что тогда:......
см. Как можно обнаружить переключатель управления миссией или Command-Tab, заменив свою программу в OS X? для этого:
может быть, ответ там появится
Ответ 2
Я смог воспроизвести это поведение, и я думаю, что это просто некорректная анимация на стороне Apple.
Просто чтобы я мог лучше объяснить это, создайте новый проект, добавьте эти две строки в applicationDidFinishLaunching:
и запустите его.
[self.window setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorStationary ];
[self.window setHidesOnDeactivate: YES];
(self.window - это окно, которое создается автоматически при создании нового проекта. В любом случае, это не имеет никакого значения, пока оно появляется на экране)
Теперь обратите внимание на это поведение: при смене с одного места, где вы можете видеть свое окно на другом, в котором есть другие окна из других приложений (и поэтому ваше окно должно исчезнуть с момента деактивации вашего приложения), только ваше окно исчезает, когда анимация заканчивается. Итак, что происходит?
Здесь я думаю, что это происходит: при переключении из одного пространства в другое окна, отображаемые во всех пространствах , реагируют только на изменение после анимации, следовательно, кратковременное появление вашего окна на приборной панели, Я думаю, вы заметите, что оно исчезает точно, когда заканчивается анимация слайдов.
Итак, к сожалению, я не знаю, как исправить вашу проблему. Кажется, так происходит.