Bug-org 513955 Replace KL* APIs to TIS* APIs
初回投稿日時: 2009年09月08日17時26分38秒
最終更新日時: 2009年09月09日02時42分10秒
カテゴリ: Mozilla Core バグ修正
SNS:
Tweet (list)
MacのKL APIが64bitアプリでは利用できないので、全てをTIS APIに置き換えるというバグです。tinderboxマシンがまだ10.4環境が残っているため、#ifdef
を利用した汚い修正になっていますが、tinderboxマシンの移行が完了すれば10.4向けのコードは完全に削除される予定です。
TISになって結構すっきりとはしたんですが、最初、馬鹿正直にこれらのAPIを直接呼び出していると、行数がすごくなるし、キャストのコードばかりで本題がよく分からないようになりました。AppleのこのAPI設計は絶対下手だと思います。何でもかんでもプロパティをvoid *
で返すよりも、TISGetBooleanProperty
等として無駄なキャストを不要にしてしまうか、MSのようにプロパティという概念を隠蔽してそれぞれのプロパティごとにAPIを用意するとか、そっちの方が絶対可読性は良いのですが。
そしてなぜか、TISInputSource
を複製するAPIが用意されていないため、TISCreateInputSourceList
で取得したTISInputSource
の寿命がその直接の戻り値のリストの寿命になってしまうという不思議仕様に対応しにくくなってます。下手に設計してしまうとメモリリークの温床になってしまうこと請けあいですし、何よりもコードが無駄に複雑化します。
結局、ラッパークラスを作り、TISInputSourceRef
自体には直接アクセスできなくしてしまうことでこれらの問題に対処しています。