こんにちは。 もうすでに記憶の彼方にあるので、なんともよくわかりませんが…
2011/2/25 Hiroyuki Ikezoe <[email protected]>: > かとうさんは先のスレッドで、uimがプリエディットをクリアしていないのはGTK+のドキュメントにおいてgtk_im_context_reset > はcursor position change時に呼び出されるもので、プリエディットをクリアするかどうかは各IMの実装者によると説明していまし > たが、これはかとうさんの記憶違いではないかと思うのです。 えっと、そういう意図の説明ではなかったような気がします。GTK+ では、"本 当のリセット" (初期化的な物) と "クリックなどによってカーソルがジャン プしたりした場合に必要な (必要ではない場合もあり) リセット" が区別でき ないので、uim では uim 内 の各言語ごとに対応ができるように、 gtk_im_context_reset() で必ずしもプリエディットを消去 (確定) してはい ませんよ、という意味で書いたような気がします。 > uimの英語のメーリングリストで該当する議論を読んでみましたが、uimがgtk_im_context_reset時にfocus_out/ > focus_inをしているのは以下のような場合に対処したためではないでしょうか。 > > gedit上でプリエディット中にツールバー上の保存ボタンがマウスで押された際に、 > Byeoru (ハングル) の場合プリエディットをコミットしたい (そういうことをしたいIMがある) > > で、このようなツールバー上のボタンが押された際にGTK+はfocus_outを呼んでくれないので、その際に呼ばれるresetの方でuim側で擬 > 似的にfocus_out/focus_inを呼び出してByeoru側ではfocus_out時にコミットする動作をするようにして対処したのではな > いかと推測してます。 はい、正しいと思います。上で書いたように、フォーカスが残っている場合の gtk_im_context_reset() がどういう意図なのかわからないので、とりあえず uim ではカーソル移動的なリセットと解釈して focus_out と focus_in で処 理しようということでした。 > で、uimが対処した上記のような場合だけじゃなくて、以下のような場合を想像してください。 > > 1) エディタ上でプリエディット中に上書き保存機能のショートカットキー(Ctrl+S等)が押された場合 > -> プリエディットをコミットしたいIMもある(Byeoru) > -> そのままプリエディットの状態を続けたいIMもある > > 2) エディタ上でプリエディット中にツールバー上の文字の拡大ボタンが押された場合 > -> プリエディットはコミットされるべきではなく、プリエディットのまま文字が拡大される > > で、この両者(+uimが対処している保存ボタンの例)を今のところIM側では判別できませんし、ツールキット側(GTK+)でも判別できないはずです > (なんかすごく面倒くさいことをやればできるのかもしれませんが)。 > > とりあえずここでは判別できないという仮定のもとに話を進めますが、であればこれはアプリケーションが面倒をみてやらないといけないと思うわけです。そ > のためには、アプリケーションからIMに『お前プリエディット中だけどそれをどうするか決めてくれ』ってお願いするメソッドが必要になるわけです。 > > > で、そういうメソッドが必要だと思ってるんですが、どうでしょうか? > また、そのメソッドの名前なんですが、どんな名前がいいでしょうか? > 自分ではちっともいい名前が浮かんでこないので、まだきちんと整理されていないのかなあと思いますが、みなさんのすばらしい灰色の脳細胞からいい知恵を > お借りしてなんとかよい着地点を見つけたいなと思います。 > > # なんとなくgtk_im_context_resetはもともとこういう用途のために作られたんじゃないかとも思ったりもしますが… そう思います。問題は、”本当のリセット" がないことによる混乱 (?) かな、 と思っていました。そういった用途に、 gtk_im_context_fix_preedit(GtkIMContext *context) みたいな API (fix は 固定してコミットするという意味) があればいいとは、昔は思ったような記憶がありま す。 -- Etsushi Kato -- Google Groups "uim-ja" group [email protected] http://groups.google.com/group/uim-ja/about
