YamaKen
yamak****@bp*****
2005年 9月 11日 (日) 23:09:57 JST
こんばんは。 At Wed, 7 Sep 2005 15:38:28 +0900, h0131****@ice***** wrote: > reset-handlerでim-update-preeditを呼んではいけないことはわかりました。 > 複雑な事情があるようですね。 > > では、IM切り替え時にプリエディットを消すにはどうすればいいでしょうか。 > 方法は2つあります。1つはuim_siwtch_imでuim_update_preedit_segmentsを呼 > ぶ方法(下のパッチ)です。もう1つは各ブリッジが消す方法です。 IM切り換えはlibuim内で行われ、context idも変化しないのでbridge 側からはそのまま同じコンテキストが使われ続けているように見えます。 よって、山本さんが対応されたようにlibuim内で処理を完結させるのが 正しいです。対応コードの挿入箇所もuim_switch_im()がベストです。 > 各ブリッジが消す方法では、 > uim-im-switcher-gtk経由でIMを切り替えたときはブリッジがIMの切り替えを > 行うのでブリッジからプリエディットを消すことが可能なのですが、 > switch-im-keyで切り替えたときは、ブリッジは切り替えが起きたことに気づ > かないのでプリエディットを消すことはできません。 uim-im-switcher経由で切り換えた時はbridgeによるuim_switch_im() への中継過程でそれを検出する事もできますが、あくまで切り換え指示 を盗み見る事ができるというだけの話で、bridge本体ではIM切り換えそ のものは認識していません。よってbridgeで処理すべきではありません。 > uim_siwtch_imでプリエディットを消す方法はどちらの切り替えにも対応でき > ます。 > > Index: uim.c > =================================================================== > --- uim.c (revision 1434) > +++ uim.c (working copy) > @@ -230,6 +230,7 @@ > > UIM_EVAL_FSTRING1(uc, "(release-context %d)", uc->id); > uim_release_preedit_segments(uc); > + uim_update_preedit_segments(uc); > > UIM_EVAL_FSTRING2(uc, "(create-context %d #f '%s)", id, engine); > if (uc->current_im_name) ------------------------------- ヤマケン yamak****@bp*****