遠藤です.

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

メールによる返信