ページ

2009年2月12日木曜日

ウィンドウを前へ、前へ、一番前へ

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

プリファンスウィンドウを開くと一番上に来ないことがある。キャプチャ中に設定を変えようと呼出すが現れない。他のウィンドウに埋もれて出てこないこともたびたび。


不便と思いつつなんとなく放っておいたが表示個所を見直してみた。今はプリファレンスを開くのに NSWindow#makeKeyAndOrderFront: を使っている。

[_window makeKeyAndOrderFront:self];


このメソッドでは弱くて?他のウィンドウに負けてしまうようだ。

もう少しマニュアルを眺めていると NSWindow#orderWindow:relativeTo: というメソッドを見つけた。これを代わりに使ってみよう。
[_window orderWindow:NSWindowAbove relativeTo:0];


マニュアルによれば上記引数の組み合わせで一番上に来るらしい。

結果は○。一番上に表示されるようになった。


さてこれで解決と思いきや、範囲選択中にプリファレンスを開くとまた埋もれたまま一番上に出てこない。


今度は同じアプリ内での順番が問題になっているようだ。再び #makeKeyAndOrderFront: を持ち出し、#orderWindow:relativeTo: と一緒に使う。
 [_window makeKeyAndOrderFront:self];
[_window orderWindow:NSWindowAbove relativeTo:0];


よさそうだ。ただ使っているとやっぱり上に来ないケースがある。どうもアプリがアクティブにならないと駄目なようだ。
そこで最終手段?である。NSApplication#activateIgnoringOtherApps: を使う。

 [NSApp activateIgnoringOtherApps:YES];
[_window makeKeyAndOrderFront:self];


これは強力で試した限りでは必ず一番上に来た。難点は他のアプリからアクティブ状態を奪い取ってしまうことだが、そもそもプリファレンスで設定を行えばそうなるのでこれは問題ないか。

しばらくこれで使ってみることにしよう。