带有NSWindowCollectionBehaviorStation的NSWindow在仪表板上可见。这是一个错误吗?

时间:2011-11-27 11:14:52

标签: cocoa nswindow spaces apple-expose

我正在尝试将NSWindow转到:

  1. 在所有空间中可见
  2. 在显示桌面时显示(通过按F11
  3. 在Mission Control / Expose
  4. 中不可见

    以下情况确实如此,但有副作用:

    [self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces
                                | NSWindowCollectionBehaviorStationary ];
    

    当切换到Mac OS X Lion上的仪表板时,窗口仍然可以单独显示仪表板项目一秒钟,然后隐藏。

    这是预期的行为还是错误?我的应用程序的用户发现在仪表板消失之前看到仪表板上的窗口会让人感到困惑。我原以为他们只能在Spaces而不是Dashboard上显示。

2 个答案:

答案 0 :(得分:3)

我查看http://cocoadev.com/wiki/DontExposeMe搜索解决方法

除了以外什么都没有用。

self.window.level = kCGDesktopWindowLevel;

现在可能会将DETECT更改公开并设置然后:) ...

请参阅How can one detect Mission Control or Command-Tab switcher superseding one's program in OS X? :) 也许会有答案

答案 1 :(得分:1)

我能够重现这种行为,我认为这只是苹果方面的一些错误动画。

这样我可以更好地解释这一点,创建一个新项目,将这两行添加到applicationDidFinishLaunching:,然后运行它。

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

(self.window是创建一个新项目时自动创建的窗口。无论如何它都没关系,只要它是一个出现在屏幕上的窗口)

现在注意到这种情况:从一个可以看到你的窗口的空间更改到另一个可以看到其他应用程序的窗口时(因为你的应用程序将被停用,所以你的窗口应该会消失),你的窗口只有动画结束时消失。那么,发生了什么?

以下是我认为它发生的情况:当从一个空间切换到另一个空间时,在所有空间上显示的窗口仅对动画后的更改做出反应,因此窗口在仪表板上的简短显示。我想你会注意到幻灯片动画结束后它会完全消失。

所以,不幸的是,我不知道如何解决你的问题。它似乎就是这样发生的。