Подтвердить что ты не робот

NSWindow с NSWindowCollectionBehaviorStationary отображается на панели инструментов. Это ошибка?

Я пытаюсь получить NSWindow для:

  • Быть видимым во всех пространствах
  • Быть видимым при показе рабочего стола (нажатием F11)
  • Не видно в Mission Control/Expose

Следующее делает именно это, но с побочным эффектом:

[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces
                            | NSWindowCollectionBehaviorStationary ];

При переключении на панель мониторинга в Mac OS X Lion окно остается видимым в одиночку с элементами панели мониторинга на секунду, затем оно скрыто.

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

4b9b3361

Ответ 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 - это окно, которое создается автоматически при создании нового проекта. В любом случае, это не имеет никакого значения, пока оно появляется на экране)

Теперь обратите внимание на это поведение: при смене с одного места, где вы можете видеть свое окно на другом, в котором есть другие окна из других приложений (и поэтому ваше окно должно исчезнуть с момента деактивации вашего приложения), только ваше окно исчезает, когда анимация заканчивается. Итак, что происходит?

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

Итак, к сожалению, я не знаю, как исправить вашу проблему. Кажется, так происходит.