2011-08-23 46 views
1

我有一個前景應用程序顯示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); 

本作的菜單欄再次出現以及停靠欄圖標但原問題(狀態項目菜單不顯示在另一個全屏應用程序中)再次可見。無論我嘗試什麼,我都贏不了。

任何建議將不勝感激!

回答

1

不幸的是我認爲這是預期的行爲。您的應用被視爲前臺應用,因此當其他應用全屏時,其所有用戶界面都被禁用。如果您覺得前臺應用程序中的狀態項仍應以全屏模式提供給其他應用程序,則應該提交錯誤。

也許最好的解決方案是將你的應用分成兩部分,一個代理應用程序,其中LSUIElement設置爲true,它創建和管理狀態項目及其菜單,以及執行大部分工作的主要前臺應用程序並啓動和管理代理應用程序。

您可以使用各種進程間通信方法讓兩個應用程序相互通話,如Distributed Objects或Apple事件。

+0

謝謝,我擔心會是這樣。有沒有辦法將這兩個對象打包到一個'.app'文件中?否則,如果用戶需要將2個.apps拖到他的應用程序文件夾或創建一個'.pkg'文件,那麼它會很糟糕。 – RaB

+0

是的,您絕對可以在主應用程序包裝中存儲幫助工具。本質上,您將構建代理應用程序作爲自己的目標,然後使用Xcode中的「複製文件」構建階段將其複製到主應用程序包的「AppPackage.app/Contents/Resources」文件夾中。 –

+0

Dropbox應用程序似乎工作得很好。此外還顯示系統的托盤菜單。 – PnotNP

相關問題