ページ

2008年3月18日火曜日

NSBGOnly と NSUIElement と LSUIElement

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

ステータスバーで動作させるユーティリティアプリを開発している。



このアプリはメニューや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