kzkの日記: immodule for Qt:BCパッチ - part5 5
日記 by
kzk
tyuyuさん、yamakenさん報告有難う御座います。
やっぱりBC版のパッチに問題が有りますね。
問題は、candidate windowが作成される時にもう一度pluginが作成されてしまうという事である。
タイミングよく分からんが、QWidgetが作成される時にPluginが再生成されてしまう事があるようだ。
こいつを追い詰める必要が有るな。
tyuyuさん、yamakenさん報告有難う御座います。
やっぱりBC版のパッチに問題が有りますね。
問題は、candidate windowが作成される時にもう一度pluginが作成されてしまうという事である。
タイミングよく分からんが、QWidgetが作成される時にPluginが再生成されてしまう事があるようだ。
こいつを追い詰める必要が有るな。
身近な人の偉大さは半減する -- あるアレゲ人
createInputContext のコードが原因? (スコア:2, 参考になる)
createInputContext() に原因があるのかもしれません。
この関数は、top-levelのwidgetにフォーカスが当たるなどした際に
callされ、QInputContextがcreateされるようにできています。詳しくは、
createInputContext() をcallしているところを見てください。
でも、このQInputContextは、今入力しているwidgetとは関係ない
widget(candidate window)に対応付けられているはずですよね。
また、フォーカスが当たらないようになっていれば
問題はないはずだと思うのですが・・・。
Re:createInputContext のコードが原因? (スコア:1)
createInputContext周りを調べてみた結果フォーカスを移さなければいいじゃないかという結論に達しました。
plugin側のみで対処はできそうです。
ただ。
examples/popup/popupとか実行してみると分かりますが、WType_Popupを持つwidgetが作成されるとpluginも作られるんですよねぇ。
入力用のwidgetでなくても。
これって無駄じゃないですか?
例えばQPopupMenuなんかが作られる度(例えば、右クリックメニューを出す度)にpluginがロードされるんですよ?
Re:createInputContext のコードが原因? (スコア:1)
Qtには存在していなかったと思うのですが・・・。
私は、この判定を実質的に実現できるのが、
setInputMethodEnabled()
isInputMethodEnabled()
であると理解しています。
で、この二つのメソッドは、バイナリコンパチビリティ的に使えない
と理解しているんですが・・・QWidgetでなら大丈夫なのかな?
Re:createInputContext のコードが原因? (スコア:1)
一応larsさんに聞いてみませうm(_ _)m
Re:createInputContext のコードが原因? (スコア:1)
また私のドキュメントの解釈ミスのようです。
ただ、以前、IRCでpuntiumさんから
「BCに関して、isInputMethodEnabled() を実行している箇所も
削ってくださいと言われました」
みたいな話を聞いたのも事実なのです(ログも残っていました)。
ですから、実際に作って手元で問題がないのを確認し、
Lars氏にパッチをアップデートしたとのメールを送りました。
いまは反応待ちです。