Takuro Ashie
ashie****@good-*****
2004年 7月 22日 (木) 13:15:27 JST
足永です. On Thu, 22 Jul 2004 02:08:18 +0900 YamaKen <yamak****@bp*****> wrote: > > > input contextのreset handlerを最近書きはじめたのですが、 > > > その際に多分primeに影響は無いと思ってお伝えしてませんでした。 > > > すいません。 > > > reset-handler中で内部状態を全部消し去るコードを > > > 書いてもらえないでしょうか? > > > #それでは直らないかもしれないですが、今後必要なコードです。 > > > また全般に関係しますが、preedit が空でも uim_reset_context() で > > uim_update_preedit_segments() としてしまうのは問題あるかもしれません。 > > プラットフォームによっては問題になります。例えばQtのtext wigetは > input contextの入力状態をwidget側でも管理していて、reset 時に > commit が発生するとcontext側との一貫性が保てなくなってしまいます。 ヤマケンさんが再三仰っているresetでcommitを呼ぶべきでないという件につい ては確かにその通りだと思うのですが,私のuimへの理解が不十分ということも あって,この文脈でその話が出てくるのがよくわかりませんでした. 現状のuim_update_preedit_segments()でcommitが呼ばれるよう意図して実装し ているには見えなかったですし,少なくともreset_context()で uim_update_preedit_segments()を呼ぶのはpreeditをクリアするために必要であ り,uim_update_preedit_segments()がcommitを呼ぶ呼ばないは別問題であるよ うに思いました. 加藤さんのお話は,余計なコールバック呼び出しによって,誤動作が引き起こさ れる可能性もあるという一般的なお話であり,commit云々のお話と必ずしも絡む ものでは無いと理解していますが,いかがでしょうか? 後に出てくるBug #454の件でようやくヤマケンさんの意図が読めましたが... (私はこの議論を知らなかったので) 結果的に,現状でPRIMEからim-update-preeditを呼ばれると,なぜか(意図しな い)commitが発生してしまうという問題は残りますが,少なくともここで田畑さ んが回答されている件についても,commitには影響の無い話だとも思います. 何か文脈を読み取れていない or 既にresetでcommitされるよう実装されている のを見落としていたらごめんなさい. > また、anthy.scmのreset-handlerを見ると";; code to commit pending > string may be added here"とありますが、bug #454にコメントを付け > たようにQtではまずい事になりますし、resetという機能の責任を越え > ているのでやめるべきです。uim側のresetはあくまでpassiveに振舞う > べきで、空文字列のcommit等はプラットフォーム固有の事情として > bridgeが処理するべきだと考えています。 この文脈であれば分かります. commitが必要であれば利用側で明示的にcommitする事はできますが,reset時に 強制的にcommitを読んでしまうと,利用側の選択肢を狭めるという意味において も,それはやるべきではないと思います. もちろん,第一義的には,ヤマケンさんが仰るように,関数名が指し示している 機能の範囲を越えているから,という点にあります. > 完ですが)。GTKの方でもライブラリ本体でのresetの扱いがまずいとい > う事はないですか? もしそうであってもlibuim本体はGTKの事情に引き > ずられる事なく仕様を決めるべきだと思います。 私の知る限り,Gtk+2本体には,そのような問題(フォーカスアウト時にリセット される,という事だと理解していますが)は無いと思います.他のカスタムウィ ジェットの事情までは追い切れていません. ちなみに,Gtk+のマニュアルには以下のように書かれています. Notify the input method that a change such as a change in cursor position has been made. This will typically cause the input method to clear the preedit state. "clear th preedit state" にcommitする事を含めるのは拡大解釈だと思います し,実際,他のIMモジュールではそのような実装にはなっていないはずです. もちろん,uimの仕様は基本的にツールキットとは独立に考えるべきですが. -- Takuro Ashie <ashie****@good-*****>