NSWindow с NSWindowCollectionBehaviorStationary отображается на информационной панели. Это ошибка? - PullRequest
55 голосов
/ 27 ноября 2011

Я пытаюсь получить мой NSWindow:

  1. быть видимым во всех пространствах
  2. Быть видимым при отображении рабочего стола (при нажатии F11)
  3. Не будет отображаться в Mission Control / Expose

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

[self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces
                            | NSWindowCollectionBehaviorStationary ];

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

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

Ответы [ 2 ]

3 голосов
/ 13 ноября 2012

Я посмотрел на http://cocoadev.com/wiki/DontExposeMe в поисках обходного пути

, на самом деле ничего не получалось, кроме.

self.window.level = kCGDesktopWindowLevel;

теперь, может быть, DETECT внесет изменения, чтобы выставить и установить их тогда :) ...

см. Как можно обнаружить переключатель управления полетом или Command-Tab, заменяющий программу в OS X? для этого :) возможно, ответ придет

1 голос
/ 01 ноября 2012

Мне удалось воспроизвести это поведение, и я думаю, что это просто немного неисправной анимации на стороне Apple.

Чтобы я мог объяснить это лучше, создать новый проект, добавить эти две строки в applicationDidFinishLaunching: и запустить его.

[self.window setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces | NSWindowCollectionBehaviorStationary ];
[self.window setHidesOnDeactivate: YES];

(self.window - это окно, которое создается автоматически при создании нового проекта. В любом случае оно здесь не имеет значения, если только это окно появляется на экране)

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

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

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

...