NSStatusItem菜单不显示在狮子全屏应用程序

问题描述:

我有一个前景应用程序显示NSStatusItem以及菜单(通过NSStatusItem setMenu:(NSMenu *)menu)。但是,当我在Lion中以全屏模式(例如Safari)查看另一个应用程序时,此菜单不会显示。NSStatusItem菜单不显示在狮子全屏应用程序

我知道,我可以把它用在Info.plist文件(或NSUIElement)设置NSBGOnly到真正的工作,但是这两种方法都会使我的应用程序图标在任务切换消失,以及隐藏在主菜单有一次我设法关注我的应用。

最后,我已经尝试设置NSUIElement为true,并做好在启动时我的应用程序如下(见How to hide the Dock icon):

ProcessSerialNumber psn = { 0, kCurrentProcess }; 
TransformProcessType(&psn, kProcessTransformToForegroundApplication); 

本作的菜单栏再次出现以及停靠栏图标但原问题(状态项目菜单不显示在另一个全屏应用程序中)再次可见。无论我尝试什么,我都赢不了。

任何建议将不胜感激!

不幸的是我认为这是预期的行为。您的应用被视为前台应用,因此当其他应用全屏时,其所有用户界面都被禁用。如果您觉得前台应用程序中的状态项仍应以全屏模式提供给其他应用程序,则应该提交错误。

也许最好的解决方案是将你的应用分成两部分,一个代理应用程序,其中LSUIElement设置为true,它创建和管理状态项目及其菜单,以及执行大部分工作的主要前台应用程序并启动和管理代理应用程序。

您可以使用各种进程间通信方法让两个应用程序相互通话,如Distributed Objects或Apple事件。

+0

谢谢,我担心会是这样。有没有办法将这两个对象打包到一个'.app'文件中?否则,如果用户需要将2个.apps拖到他的应用程序文件夹或创建一个'.pkg'文件,那么它会很糟糕。 – RaB

+0

是的,您绝对可以在主应用程序包装中存储帮助工具。本质上,您将构建代理应用程序作为自己的目标,然后使用Xcode中的“复制文件”构建阶段将其复制到主应用程序包的“AppPackage.app/Contents/Resources”文件夹中。 –

+0

Dropbox应用程序似乎工作得很好。此外还显示系统的托盘菜单。 – PnotNP