ワードパッドでのIME読み上げの不具合
IME (Input Method Editor) と Text Services Framework のアクセシビリティ
NVDA 本家の実装の関連箇所(2012年1月現在)
MSAA を使って候補UIの候補文字列を読み上げる処理を実装してみました。
まだ未確定文字列 (Composition Window) の対応はできていません。
lp:~nishimotz/nvdajp/betterInput rev 4271
以下の環境で動作を確認しています。
Windows 7 (x64) + wordpad + Microsoft IME を対象とした未確定文字列 (Composition Window) の読み上げ処理を実装してみました。
lp:~nishimotz/nvdajp/betterInput rev 4278
ms971336 の記述にしたがって ITfTextEditSink::OnEndEdit() から RPC で Python 側の処理をトリガーしています。
メモ帳でキーエコーが重複する不具合があります。また、32ビットアプリケーションへの対応も未実装です。
Windows 7 (x64) + Microsoft Word 2010 (x86) + Microsoft IME で未確定文字列 (Composition Window) の読み上げが動作しました。
lp:~nishimotz/nvdajp/betterInput rev 4281
以前のキーエコーの処理は無効化したのですが、スペースキーを押した直後の読み上げが詳細読み上げにならない不具合が一部の環境で起きています。また、ワードパッド x64 が起動直後にIME読み上げしない(何か入力してEnterすれば次の行から有効になる)という現象を確認しています。
他のOSでの検証はこれから行います。
IMMとTSFの共存を考慮した実装が安定してきたので jpdev120206 スナップショットに取り入れました。
lp:~nishimotz/nvdajp/betterInput rev 4282
リリースノートと重複しますが、以下のような状況です:
・Windows XP SP3 において、 「詳細なテキストサービスをすべてのアプリケーションに拡張しない」 「詳細なテキストサービスを無効にしない」 という設定でワードパッドとMS-IMEにおける日本語入力の読み上げが欠落します。 テキストサービス完全無効化(チェック無効+チェックあり)および テキストサービス全アプリ有効化(チェックあり+チェックなし)の場合は動作します。
・変換候補の読み上げにおいて音声の最初の部分が重複して再生されることがあります。 (候補読み上げが IMM と MSAA の両方で発生する場合の処理が不完全なためです)
・ATOK 2011 についてはテキストサービス無効の場合のみ動作を確認しています。
なお、現時点で動作確認している環境は以下のとおりです:
Windows 7 sp1 x64 + Microsoft IME + ATOK 2011 環境
Windows XP sp3 x86 + Microsoft IME 環境
チケット25653に関連して、アプリケーションのスリープモードでIME読み上げを抑止するように変更しました。
jpdev120214 と ATOK 2012(テキストサービスを使用しない)にて、以下の現象を確認しました。
ATOK 2012 (テキストサービスを使用しない) + Windows 7 x64 SP1 + メモ帳(64ビット)で確定読み上げが欠落する問題に暫定的な対応を行いました。
lp:~nishimotz/nvdajp/betterInput rev 4284
Windows XP + Wordpad + Microsoft IME でプリエディット(未確定文字列)読み上げと確定読み上げが行われない現象は解決していません。
詳しく調べてみたところ nvdajpime/nvdajpime.cppp で GetIMMOpenStatus() が常に FALSE を返すため、TSF の _Init() が呼ばれていないようです。
カレントウィンドウのハンドルを返すはずの GetFocus() が NULL しか返さないので IMM の状態を取得できていません。
スレッドが一致しないためかも知れません。
GetFocus関数: http://msdn.microsoft.com/ja-jp/library/cc364641.aspx
jpdev120311 + Windows XP sp3 で「詳細なテキストサービスを無効にする」がオンの場合に、 未確定文字と変換候補の読み上げができていません。
jpdev120323 にて Windows XP sp3 「詳細なテキストサービス無効」における不具合への対応を行いました。
本件の副作用かどうかはわかりませんが日本語を入力してEnterで確定したときに、例えば「漢字」を「かんじ、かん、じ」のように繰り返し読み上げる現象を確認しました。
日本語変換候補の読み上げが重複する不具合への対策を行い、2012.1j-beta3 に反映させました。
http://bazaar.launchpad.net/~nishimotz/nvdajp/releases_2012.1/revision/5064
対処療法ですが、MSAA および IMM から同じ候補情報が連続して通知されたときに、2回目以降のイベントを無視する処理です。
ただし、後から届いたイベントの候補文字列が同じであっても accid の情報が追加されている場合は「候補1」「候補2」などの情報のみを出力キューに追加しています。
ワードパッドでIME読み上げの不具合が確認されました。
などの現象です。2011.1.1j3 および 2011.2j の両方で起こります。
Windows XP / 7 (x86) / 7 (x64) のいずれのワードパッドでも何らかの不具合があります。
Microsoft IME だけでなく ATOK でも起こる場合がありますが、詳細は引き続き調査します。