[Anthy-dev 166] Qt & jmode

Back to archive index

yusuk****@cheru***** yusuk****@cheru*****
2003年 7月 9日 (水) 21:38:06 JST


田畑です。

Qtのアプリにjmodeで入力すると遅いという報告を受けたので、
調べてみました。

まず、jmodeは英数モードの際にもキーイベントを受けとる
ように設定しているという点で他のXIMサーバと異なっています。
GUIのツールバーから英数モードと平仮名モードの切り替えを
実現するためにこのような設定になっています。
(XIMではサーバ側からイベントの転送開始を指示できない)

また、Qtはプリエディットが無い時に一回キーが押されると4回の
XSetICValuesを呼ぶというのも原因のようです。
キーイベントを含めてXIMサーバとの間でパケットが5往復する
ことになります。また、jmodeはXのイベント経由で通信をするので
コンテキストスイッチは jmode <-> Xサーバ <-> Qtアプリで
発生してて、結構悲惨です。

XSetICValuesを呼んでいるのは
QInputContext::setComposePosition()と
QInputContext::setComposeArea()で2回です。
XSetICValuesは名前がValue*s*で複数形であることから
わかるようにこの2回の呼出しは統合できます。

さらに、これらはキーを押した時とカーソルが移動した時の
2回呼ばれて計4回です。この場合はカーソルを動かしたあとの
一回にまとめれば良いので統合することができます。

ということで、直し方はわかったのですが、XIM関連のコードを
直すよりも本質的な改善に取り組むというのが、私も含めた
周囲の皆様のコンセンサスだと解釈しているので、この問題の
優先順位は低いです。

--
 CHAOS AND CHANCE!
  Yusuke TABATA (yusuk****@cheru*****)



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