[Anthy-dev 943] Re: [uim] im-update-preedit で確定されてしまう。

Back to archive index

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-*****>




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