ステータスバーで動作させるユーティリティアプリを開発している。
このアプリはメニューやDockを表示させたくないので info.plist で NSBGOnly を設定していた。
<key>NSUIElement</key>
<string>1</string>
ところが、このアプリからウィンドウを表示させた時に、ウィンドウにフォーカスがあたらないことがわかった。
(例)
(1) ステータスバーのメニューで項目を選択
(2) ウィンドウを表示(フォーカスがあたっていない)
(3) ウィンドウを選択(ようやくフォーカスがあたる)
これだと困る。ウィンドウを開いたのにいちいち選択してやらなければフォーカスがあたらないなんて不便だ。
ネットを調べていると NSUIElement が見つかった。
http://cathand.org/diary2002.html
http://www.padmacolors.org/archives/2004/02/04_080905.php
http://forums.macosxhints.com/archive/index.php/t-18403.html
ADCで検索してみると NSUIElement では見つからなくて LSUIElement となっていた。
LSUIElement
これらによると LSUIElement を指定したアプリケーションは下記の動作モードを持つようになる。
・Dockに現れない
・強制終了ウィンドウに現れない
早速試してみる。
<key>LSUIElement</key>
<string>1</string></pre>
うまくいった。
(例)
(1) ステータスバーのメニューで項目を選択
(2) ウィンドウを表示(フォーカスがあたっている)
ちなみに NSUIElement でも同様に動作した。動作上の違いは今回だけではわからなかったが CocoaBuilderの記事によると NSUIElementは deprecatedの様子。
http://www.cocoabuilder.com/archive/message/cocoa/2005/7/13/141793