LSUIElement=1 を使用してドック項目、メニュー バーを非表示にし、Command-Tab アプリケーション スイッチャーに表示されないようにするバックグラウンド アプリケーションでいくつかの問題が発生しています。
Snow Leopard のみの問題のようです。
アプリケーションは NSStatusItem をメニュー バーに配置し、クリックするとメニューをポップアップします。「設定...」を選択すると、設定を含む NSWindow が表示されます。
機能していないように見える最初のことは、ウィンドウが前面に配置されず、他のすべてのアプリケーション ウィンドウの背後に表示されることです。
電話してこれを修正しようとしました
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES]
しかし、それはうまくいきませんでした。
しばらくして、メニューが実行ループへのメッセージの送信をブロックしていることがわかったので、MainController に別のメソッドを記述し、遅延してメッセージを送信しました。
[self performSelector:@selector(setFront:) withObject: [preferencesController ウィンドウ] afterDelay:1.0];
-(void)setFront: (id) theWindow {
[[NSApplication sharedApplication]activateIgnoringOtherApps:YES];
[theWindow orderFrontRegardless];
[theWindow makeKeyWindow];
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES];
}
send-every-possible-message-to-make-it-do-what-it-should-be-doing-approach に注意してください。
これは機能しますが、ウィンドウはすべてのアプリの他のすべてのウィンドウの上に前面に表示されますが、ほとんどの場合、アクティブではなく、タイトル バーがグレー表示されます。タイトル バーをクリックしても、ウィンドウはアクティブになりません。ウィンドウの INSIDE をクリックするとアクティブになる!?
これはすべて、Leopard では問題ではないように思われました。activateIgnoringOtherApps を呼び出してウィンドウ キーを作成するだけで問題なく動作するように見えました。
Snow Leopard には、その動作をエミュレートすることになっている LSUIElement を置き換えるように設計された新しい API があります。
http://developer.apple.com/mac/library/releasenotes/cocoa/appkit.html
私はそれをいじってみましたが、それは SL のみであり、LSUIElement を設定することができませんでした。