この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2009年9月)

2009年9月8日

Bug-org 513955 Replace KL* APIs to TIS* APIs
初回投稿日時: 2009年09月08日17時26分38秒
最終更新日時: 2009年09月09日02時42分10秒
カテゴリ: Mozilla Core バグ修正
SNS: (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自体には直接アクセスできなくしてしまうことでこれらの問題に対処しています。

関連するかもしれないエントリ

bug-org 513955を含むエントリ