gtk_im_context_reset()が動かない

LinuxのIME処理には重要なAPIであるgtk_im_context_reset()が一部の環境下、特に新しいプラットフォームで動かなくて困っています。

今のところ分かっている情報から推測すると、uimと、iBusを利用していることが原因なのかもしれません。私の手元ではUbuntu 9.04 (SCIM)では問題ありませんが、Ubuntu 9.10 (iBus)では機能しませんし、早くから、Debianのsidでuimを利用するとマウスクリック時にうまく確定されないという報告がありました。

Geckoは一般的なGTK2アプリとは違って、IMのコンテキストをウインドウ単位で生成し、これをウインドウ内のネイティブウィジット間で共有しています。また、一つのネイティブウィジット内でも、<input><textarea>が複数存在するため、どちらにしても複数のエディタ間でIMのコンテキストを共有しないといけない、特殊なアプリケーションです(Webブラウザで馬鹿正直にエディタごとに用意すると、とんでもないことになりかねません)。

このため、Geckoではフォーカスが移動する時や、マウスのクリック時に処理を単純にするためにXPレベルで未確定文字列を強制的に確定しようとします(これが好ましいかどうかは別にして、現在の設計ではこれ以外の解決策をとるのは短期的には現実的ではありません)。ですが、現状、Linuxではこれがうまく機能しなくなっています。

実際にこの問題を確認するには、未確定文字列がある状態で、そのエディタ内をクリックしてみてください。

Ubuntu 9.10でテストしてみると、見た目では確定されているのですが、そのままスペースキーを叩くと確定したはずの文字列で変換が始まります。もちろん、そのまま確定すると文字がダブることになります。

この問題に関して、原因を究明する情報が不足していて困っています。この環境なら再現しない、この環境、このIMだと再現する、といった情報や、IMの開発コミュニティの情報をお持ちでしたら、是非それを教えてください。お願いします。

追記(2010/01/8/14:30):

uim-jaに投稿してみたところ、やはりIM側の実装に大きく依存するようです。

8 件のコメント

  1. hatena.ne.jp/piro_or/ :

    役に立ちそうにない情報ですが……
    * Ubuntu 9.10
    * Firefox 3.5.6
    * ATOK X3
    の組み合わせでは特に問題はないようです。
    日本語入力をON→文字入力→変換せずに同じテキストエリアの中をクリック→スペースを入力 としたところ、期待通りに確定されていました。

  2. masayuki :

    早速ありがとうございます。

    ATOKはIIIMFだと思うので、それだけでIM以外の部分(例えばGTK)が容疑者から除外できると思います。

  3. mitsugu :

    以下の環境で非再現です。(iBusは現時点で安定性に欠けるので使用していません)
    ・Ubuntu 9.10 Karmic Koala
    ・scim-prime
    ・Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2pre) Gecko/20100106 Namoroka/3.6pre

  4. masayuki :

    どうもありがとうございます。

    お二人の情報からして、uimとiBus固有の問題、と考えてよさそうですね。

  5. takanori :

    Fedora 12
    ibus-1.2.0.20091204-2.fc12
    anthy
    Firefox trunk
    では再現します。

    Ubuntu 9.10は
    ibus-1.2.0.20090927-2ubuntu2
    ですよね?

  6. mitsugu :

    以下の環境で非再現です。
    ・Ubuntu 9.10 Karmic Koala
    ・ibus 1.2.0.20091014-1~ppa1~ja2 (Japanese Team Repository)
    ・ibus-anthy 1.2.0.20090813-2ubuntu1~ppa2 (Japanese Team Repository)
    ・Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2pre) Gecko/20100106 Namoroka/3.6pre

  7. mitsugu :

    すません。確認ミスでした。先の環境でも再現します。

  8. masayuki :

    > Ubuntu 9.10は
    > ibus-1.2.0.20090927-2ubuntu2
    > ですよね?

    です。私はLinuxはほとんど分からないのでデフォルトのままでテスト環境として利用しています。