[Anthy-dev 767] Re: focus context, skk.scm

Back to archive index

yusuk****@cheru***** yusuk****@cheru*****
2004年 4月 15日 (木) 23:08:44 JST


田畑です。

> > こちらで確かめてみたところ、Linux ではそのような症状は出ませんでしたが、
> > Mac OS X では確かに問題が出ました。前回の変更で、イベントの処理の順番
> > を変えるために send_sync_reply を先に持って来たことが原因だと思います。
> > よく考えずパッチを送ってしまってすみません。
こちらこそよく確認してなくてすみません。
XIMではサーバから送るパケットは何かのパケットの返事として
送らないといけないというルールがあります。
#skkinput2のソースコード中のコメントというか愚痴、
#とuim-xim --trace-ximの出力が参考にできると思います。
で、passive packetというのは返事を送れるチャンスになったら
返事よりも先に送ってしまうパケットというつもりでコードを書きました。
プロトコル的には
(1)Client->Server XIM_FORWARD_EVENT
(2)C<-S XIM_SYNC_REPLY
というの流れが必要なのですが、ここにキーイベントの送り返しと確定が
発生すると
(1)C->S XIM_FORWARD_EVENT
(2)C<-S XIM_FORWARD_EVENT(返事として同じイベント)
(3)C<-S XIM_COMMIT(確定文字列)
(4)C<-S XIM_SYNC_REPLY
ということになるのですが、前回のpatchでは(2)と(3)の順序は保たれて
いたのですが、(3)と(4)が入れ替わっていて、次にC<-Sのパケットが
来るチャンスが来ないと(3)の処理が保留されてしまうというのが
問題の原因でした。
クライアントの作りによっては、preeditの場所の
更新などで、そのチャンスがすぐ来るのですが、そうでない場合に
問題となったようです。

> > 一応の解決策として、すでに send_sync_reply してしまったという事で、
> > COMMIT_RAW 時の send_key_event を push_packet ではなく 
> > push_passive_packet で送るようにしてみました。 XIM を理解していないの
> > で、全く間違ったことをしている心配はありますが…
ということで、これで正解のようです。

uim-ximのコード自体はそろそろ5周年になろうというのに、
まだまだバグが出てきて悲しいです。
--
 CHAOS AND CHANCE!
  Yusuke TABATA (yusuk****@cheru*****)




Anthy-dev メーリングリストの案内
Back to archive index