遠藤です. coさん,ご指摘ありがとうございます. 私はLinux版のビルドしかしたことがないので残念ながら Windows版のビルドはやった事無いです…
Windows版のビルドをされた方いらっしゃいますかね? 2012/8/15 co <[email protected]>: > coと申します。SKK日本語入力FEPというWindowsのテキストサービスフレー > ムワークによる日本語入力メソッド(以下IME/TSF)を作成しております。 > > LibreOfficeのWindows版のコンポジション処理(漢字変換時のインライン表 > 示関連)を改善したいと考えています。どなたかLibreOfficeのWindows版を > ビルドできる方、ご協力願えないでしょうか。 > > # もし場違いな話題でしたらすみません… > > 以下に、IME/TSF開発者の視点によるLibreOffice側の問題箇所につい > て情報を書きます。ソースは > vcl/win/source/window/salframe.cxx ImplHandleIMENotify() > の周辺です。 > > -------------------------------------------------------------------- > ・LibreOffice(のWindows版)ではMS-OfficeやIE,Firefoxなどと同様、コン > ポジションを自前で処理している。 > > ・LibreOfficeのコンポジションの実装は他のアプリケーションと比べると > 貧弱で、IME/TSF側からコンポジションの座標が正確に取得できず > (ITfContextView::GetTextExt APIが画面隅の座標を返す)非常に使いに > くいものとなってしまっている。 > > ・この対応策として、LibreOfficeにはアプリケーションまたはIME/TSF側から > IMN_OPENCANDIDATEメッセージを受け取り、コンポジション座標を受動的に > 更新する処理が実装されているが、この手法には以下の問題があると考える。 > > ■問題1 > 他のアプリケーションではメッセージなどなくてもコンポジションの更新 > によって自動的に座標が更新され、IME/TSF側に正しい座標が渡るのに、 > LibreOfficeだけはわざわざ特殊なメッセージを送らないと何も変化しない > というのが、そもそもおかしい。 > > このメッセージはマイナーなもので、使わないで済むならそのほうが効率 > が良い。何より、IME/TSF側からウィンドウメッセージを生成して送信する > という処理自体、処理レベルがおかしく歪な設計だと(個人的に)考える。こ > のメッセージを必要としている主要なアプリはLibreOffice以外で見たこと > がない。今後新たに作られるIME/TSFでは、わざわざLibreOfficeのためだけ > にメッセージを送信する筋の悪い実装を強いられることになる。 > > ■問題2 > このメッセージはOPENCANDIDATEと名がついている通り、IME/TSFの候補一 > 覧を選択する瞬間に使うもので、候補入力途中のサジェストウィンドウ(予 > 測表示)の表示でも同じメッセージを使うのはおかしい。 > > IME/TSFは全てのアプリケーションに食い込んで動作するので、予測表示 > の時にもOPENCANDIDATEのメッセージを飛ばす作りにしてしまうと、他のア > プリケーションの動作がおかしくなってしまう恐れがある。そのため、『わ > ざわざLibreOfficeかどうかを判断して内部動作を切り替え』『本来は候補 > 一覧を通知するためのメッセージを間違った用途に使う』ことでようやく座 > 標更新が行えるというデザインを取らざるを得ない。 > > ■問題3 > メッセージを受け取ったLibreOfficeは、座標を更新してくれるのだが、 > 同時にカーソルを消してしまう(pFrame->mbCandidateMode = TRUE)。現状で > は候補一覧の時にはカーソルが消えても問題はないのだが、予測表示の最中 > にカーソルが消えてしまうのは問題で、IME/TSF側が困ってしまう。 > > (画像のように、候補選択中にカーソル表示が必要なIMEが将来登場する > かもしれないと考えると、消してしまうこと自体おかしいとは思うが、現在 > の主要な日本語入力方式では特に問題はないため、今回は気にしません) > > (余談ですが、現在LibreOfficeではコンポジションの属性でカーソル制御も > 行なっているようなので(憶測)、日本語入力のIME/TSFを使っている限りに > おいてはこのメッセージでのカーソル制御はなくても問題ないと考えます) > > ■問題4 > メッセージを一切送らなくても、ごくまれにIME/TSF側が座標を取得でき > ることがある(なぜかは不明。現在拙作のSKK日本語入力FEPではこの現象を > 利用してメッセージ送信なしで動作させている)。しかし、アプリ側で > ImmSetCandidateWindow APIを呼んでもらえない限り、LibreOfficeのウィン > ドウ移動のイベントなどが一切IME/TSF側に通知されない。このためコンポ > ジション関連ウィンドウだけがアプリケーションのウィンドウ移動に連動し > て動かずに取り残されるなど、使い勝手が非常に悪い。 > > ■結論 > LibreOfficeのWindows版ではコンポジション処理を独自実装しているが、 > 座標更新に関して実装が不十分であり、他のアプリ(MS-Officeとか)と同じ > ように、コンポジションの変更に応じて、外部からのイベントに一切頼らず > に自力で座標を更新する(ImmSetCandidateWindow APIを呼ぶ)よう改良すべき。 > -------------------------------------------------------------------- > > と、ここまでは威勢のいい話なのですが… > LibreOfficeのソースを読んで修正箇所の目星をつけようとしているので > すが、情けないことにいまだにWindows版をコンパイルすることができず、 > スタートラインにすら立てず苦戦しています。VC++を使っているせいだと思 > うのですが…。 > > どなたかWindows用の日本語版LibreOfficeをビルドできる方、ご協力いた > だけないでしょうか。 > # 正直、英語わかりません… > > 余談ですが、LibreOfficeはコンポジションの色属性をまったく解釈しな > いので、MS-Office等と比べると同じ内容を与えてもこのように異なった(モ > ノクロの)表示になってしまいます。将来的にはこのあたりも改善していけ > たらいいなと考えております。 > > http://twitpic.com/aj9hw9/full > > よろしくお願いします。 > -- > co http://coexe.web.fc2.com/ > > -- > Unsubscribe instructions: E-mail to [email protected] > Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette > List archive: http://listarchives.libreoffice.org/ja/discuss/ > All messages sent to this list will be publicly archived and cannot be deleted > -- /* * Yasunori Endo * * 1st grade student * Sendai National College of Technology, Hirose * Advanced Course of Information and Electronic Systems Engineering */ -- Unsubscribe instructions: E-mail to [email protected] Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette List archive: http://listarchives.libreoffice.org/ja/discuss/ All messages sent to this list will be publicly archived and cannot be deleted
