Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


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 discuss+help@ja.libreoffice.org
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

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.