きりかノート 3冊め

おあそびプログラミング

windowWillResignKey: はないのかっ

ないんだけどね。

RubyKaigi でふじもとさんと話しながら、TMPresents を改造した。そのときに、 「スライドの前に別アプリケーションが持ってこられるようになっててもいいかな」とも思った。なので、別のアプリケーションが前面になっているときに ウインドウレベルを通常のアプリケーションと同階層に下げて、他のアプリケーションのウインドウも表示できるようにしてみた。これは、スライドのウィンドウが最前面でなくなったとき(デリゲート windowDidResignKey:)にウインドウレベルを変更するということで実装。

だけど、Command+TAB でアプリケーションを切り替えたときには、

  1. 前面のアプリケーションが変わる
  2. TMPresentsのスライドウインドウのウインドウレベルを変更

という順になるので、2.の時点では TMPresents のウインドウのほうが前になってしまう。このために、選択したアプリケーションのウインドウはスライドウインドウの後ろになってしまって表示されない。Witch などの別のウインドウ切り替えのアプリケーションを利用すれば、意図したとおりには動作する。これは、切り替えのアプリがアクティブになったときに、TMPresents のウインドウレベルが変更されるから(たぶん)。

ここで、windowWillResignKey: があれば、前面のアプリケーションが変更される前にウインドウレベルが変更できるので、Dock や Command+TAB にも対応できるのになあと考えたのだ。ない理由は十分に想像できるので、ただの愚痴。