TOKUNAGA Hiroyuki
tkng****@xem*****
2005年 1月 7日 (金) 07:36:56 JST
On Wed, 05 Jan 2005 18:18:00 +0900 YamaKen <yamak****@bp*****> wrote: > ヤマケンです。だんだんuim-prefがいい感じになってきましたね。 > > At Wed, 5 Jan 2005 16:07:18 +0900, > tkng****@xem***** wrote: > > > > On Tue, 4 Jan 2005 15:09:45 +0900 > > Kazuki Ohta <mover****@hct*****> wrote: > > > > > YamaKenさんのパッチとは別の方法で解決してみました(r118)。というよ > > > りこのパッチを当ててしまうとwidgetが右側にどんどん延びて行ってしま > > > いますね:-)ただ、うちの環境だとまだ終了時にsegvってます。有効な > > > btを取れないのですが... > > #パッチちゃう… > > > たぶん原因がわかりました。GTK+のim_module_exitでuim_quitを呼んでい > > て、しかもそれがuim_custom_quitよりも先に実行されているのが原因です > > 。 uim_quit内でuim_custom_quitを呼ぶように変更しても問題ないですか? > > (試しにそのように変更してみると、segvは起こらなくなりました。) > > ああ、そういう事でしたか。その問題には別の方法で対応した方がいい > と思います。 > > IMKit-uimでも同様の問題が発生した事があるんですが、uimの提供する > IMをQtopiaのIMプラグインに一対一で対応させている関係で、1つのプ > ラグインがuim_quit()を呼んで終了した後にもまだ同一プロセス内の他 > のプラグインがuimの機能を呼び出す必要のある場合があり問題になり > ました。 > > 結局uim_init()を呼び出した回数を参照カウント(initカウント?)とし > てグローバルに保持して、カウントが0になった時点でuim_quit()を呼 > ぶという実装にして問題を回避しました。 > > libuim内でこれと同様の実装を行って対応しませんか? ブリッジ側の負 > 担も減りますし。 デザイン的にその方がきれいかなと思って実装してみたのですが、それではダ メでした。それぞれの関数が呼ばれる回数とタイミングを調べ直すと、 uim_initが2回呼ばれて、uim_quitが2回呼ばれて(この2回目で終了処理が行わ れる)、それからuim_custom_quitが呼ばれています。実装する前に気づけよと いう感じです。 というわけで、このデザインだとうまくいきません。そこで、次のような解決 策を提案します。 - uim_custom_init/quitはuim_init/quitのなかに埋め込む。 - フル機能を必要とする場合にはuim_custom_enableとか、そんな感じの 関数を明示的に呼ばせる。 これでリソースの問題も解決できると思うのですがどうでしょう? > また、必要リソース節減のため、uim_custom_{init,quit}()の呼び出し > はlibuim内に埋め込むのではなくuim-prefのようにcustom APIのフル機 > 能を必要とするアプリケーションが明示的に行う事を意図しています。 > > 今はuim_init()内でフル機能版のcustom.scmを読み込んでいますが、 > 0.4.6までにはIMの実行に最低限必要な軽量機能版に挿し替える予定で > す。 -- 徳永拓之 tkng****@xem***** http://kodou.net/