[Anthy-dev 2372] Re: IM切り替え時のプリエディット消去について

アーカイブの一覧に戻る

Etsushi Kato ekato****@ees*****
2005年 9月 12日 (月) 15:22:43 JST


ヤマケンさん、こんにちは。

On Sun, Sep 11, 2005 at 11:09:14PM +0900,
YamaKen <yamak****@bp*****> wrote:

> もう一つ確認させてください。私の主張の中では「commit」と
> 「プリエディットのクリア」を明確に区別していますが、もしかして加藤さん
> の言う「commit」は「reset時のプリエディットのクリア」を指していないでしょ
> うか?

いえ。

徳永さんも uim @ fdo でおっしゃっていましたが、reset に関して議論してい
る場合におこる解釈の違いは、reset という概念に、input spot の変化を含
むかそうでないかということだと思います。ぼくや、おそらく、James Su さ
んは、gtk+ が gtk_im_context_reset() を input spot の変化に使うことを
前提にした話に基づいているので、ヤマケンとの解釈に違いがでているという
ことだと思います。

http://developer.gnome.org/doc/API/2.0/gtk/GtkIMContext.html#gtk-im-context-reset

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.

もちろん、gtk_im_context_reset() が「本当の reset」 について呼ばれるの
であれば絶対にコミットすべきでないに同意します。ただ現状はそうでは
ないわけで、commit もありうる (Korean input method のように) というこ
とでした。

ただし、init 時以外に「本当の reset」というものがどういった状況で呼ば
れるのかは、想像できませんでした。

> 以上のように、私はreset時のcommitは許されるべきでないとという立
> 場ですが、「reset時にcommitを許すかどうか」は現在問題になってい
> る「reset時のプリディットのクリアについてどの層が責任を負うべき
> か」とは別問題なので、同意できなくても保留しておきませんか?

はい。

> commit/focusまわりについては私は以下のような見解を持っていますが、
> この件については必要になった時点でuim @ fdoで別途議論する方がよい
> でしょう。
> 
> ・toolkit/applicationはfocus移動時にresetを発行すべきでない

この focus 移動というのがまた問題です。uim @ fdo の議論でもありましたが、
focus in, focus out, input spot change の三種類あると思います。ぼくも
focus_in, focus_out では reset は発行すべきでは無いと思いますが、input
spot の変化では、現状のように gtk_im_context_reset() が発行されるのは
良いと思います。

一例ですが、Mac OS X の挙動をみると、input spot の変化では、IM や
bridge ではなく、フレームワークの段階で、preedit が commit され
る挙動になっているように見えます。例えば、テキストエディトというエディ
タにおいて、文字の入力中に、同じエディタ内の他の文章のある文字をクリッ
クすると、compose 中のpreedit の文字はコミットされます。

同じテキストエリア内で input spot を動かした場合の挙動というのは、
http://lists.freedesktop.org/archives/uim/2005-May/001080.html で Paul
Hampson さんの話

As a user, I would expect the text in the pre-edit to be comitted at
that point, else I would have hit 'esc' (or whatever the cancel key
happens to be) before moving off the find the mouse.

ie. as far as I am concerned, the preedit area is a projected part of
the text, not a piece of text waiting to be inserted.

が、しっくりきました。

> ・focus移動イベントはIMに通知されるべき(現時点のuimには欠けてい
>   る)
> ・focus移動時には、IMが必要とするならresetしてよい(この場合プリ
>   エディットのクリアはIMが行う)
> ・focus移動時には、IMが必要とするならcommitしてよい
> ・bridgeやtoolkit/application層では、いかなる場合においてもプリ
>   エディット文字列の自動commitを行うべきではない。それは各IMの責
>
はい。いいと思います。現状は、focus_in, focus_out, reset を bridge が
application/toolkit から通知されているわけで、reset 以外に、focus_in,
focus_out も IM に通知すればいいと思います。それに加え、「本当の reset」
を処理も必要になると思います。もちろん、現在の reset という名前を変
えるのはいいと思います。

ヤマケンさんの以前の話では、bridge 側が commit するという方向でしたの
で違和感を感じましたが、今回の IM 側が責任を持つ (commit し得る) とい
う話は問題ありません。

-- 
Etsushi Kato
ekato****@ees*****



Anthy-dev メーリングリストの案内
アーカイブの一覧に戻る