Ticket #31317

デスクトップでフォーカスを移動すると「大文字」「ロシア」「半角」などと読み上げる

Open Date: 2013-05-09 17:34 Last Update: 2013-06-14 15:26

Reporter:
Owner:
(None)
Type:
Status:
Closed
Component:
(None)
MileStone:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

デスクトップでフォーカスを移動すると不自然な「大文字」という読み上げが発生する現象を報告していただいています。

最初に報告があったのは jpdev130405 でしたが、jpdev130509 でも解決していないとのことです。

既定の入力システムが ATOK 2009 や Google 日本語入力などの場合に起きるようです。

概要「タブキーなどで、たとえばデスクトップウインドウなどで、フォーカスを移動すると、「オオモジ・・・・」というような少し意味不明な読み上げをします。」

ログ:

IO - inputCore.InputManager.executeGesture (20:36:54):
Input: kb(desktop):tab
DEBUG - NVDAHelper.handleInputCandidateListUpdate (20:36:54):
lastKeyCode 9
DEBUG - NVDAObjects.behaviors.CandidateItem.getFormattedCandidateName
(20:36:54):
1 ŸßŸß オーモジ Ÿ ß オーモジ Ÿ ß
IO - speech.speak (20:36:54):
Speaking [LangChangeCommand (u'ja'), u'オーモジ Ÿ \xdf オーモジ Ÿ \xdf']
DEBUGWARNING - synthDriverHandler.SynthDriver.speak (20:36:54):
Unknown speech command: LangChangeCommand (u'ja')

さきほど 2013.1jp-beta2 について同様のご報告があり、下記のログを送っていただきました。

Input: kb(desktop):shift+tab
DEBUG - NVDAHelper.handleInputCandidateListUpdate (16:32:47):
lastKeyCode 9
DEBUG - NVDAObjects.behaviors.CandidateItem.getFormattedCandidateName (16:32:47):
1 ?t?t オーモジ ? t オーモジ ? t
IO - speech.speak (16:32:47):
Speaking [u'オーモジ ? \xfe オーモジ ? \xfe']
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
オーモジ,名詞,一般,*,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
y,名詞,固有名詞,組織,*,*,*,*
IO - speech.speak (16:32:47):
Speaking [u'コンピュータの説明(D):  エディット  Alt+d']
IO - speech.speak (16:32:47):
Speaking [u'空行']
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
t,名詞,固有名詞,組織,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
オーモジ,名詞,一般,*,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
y,名詞,固有名詞,組織,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
t,名詞,固有名詞,組織,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
コンピュータ,名詞,一般,*,*,*,*,コンピュータ,コンピュータ,コンピュータ,3/5,C1
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
の,助詞,連体化,*,*,*,*,の,ノ,ノ,0/1,動詞%F2@0/形容詞%F1
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
説明,名詞,サ変接続,*,*,*,*,説明,セツメイ,セツメイ,0/4,C2
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:47):
カッコ,名詞,一般,*,*,*,*,カッコ,カッコ,カッコ,1/3,C1
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:48):
d,記号,アルファベット,*,*,*,*,d,ディー,ディー,1/2,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:48):
カッコトジ,名詞,一般,*,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:48):
コロン,名詞,一般,*,*,*,*,コロン,コロン,コロン,1/3,C1
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:48):
エディット,名詞,一般,*,*,*,*,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:48):
alt,名詞,一般,*,*,*,*,alt,オルト,オルト,1/3,C0
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:49):
プラス,名詞,一般,*,*,*,*,プラス,プラス,プラス,0/3,C2
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:49):
d,記号,アルファベット,*,*,*,*,d,ディー,ディー,1/2,*
DEBUG - synthDrivers.jtalk.mecab.Mecab_analysis (16:32:49):
空行,名詞,一般,*,*,*,*,空行,クーギョー,クーギョー,0/4,C0

Ticket History (3/15 Histories)

2013-05-09 17:34 Updated by: nishimoto
  • New Ticket "デスクトップでフォーカスを移動すると「大文字」と読み上げる" created
2013-05-09 18:38 Updated by: nishimoto
Comment

下記の手順で、それらしい現象が再現できました。

新しくインストールしたばかりの Windows 7 64ビットに Google 日本語入力をインストールして、デフォルトの入力システムにする。

jpdev130509 のポータブル環境を作り、NVDA を起動する。

コントロールパネル「テキストサービスと日本語入力」を開き、Google 日本語入力のプロパティのダイアログを開く。

タブを移動したり、タブの中でカーソルを移動すると、「未定義」「大文字」あるいは画面の内容と無関係な文字説明が読み上げられる。

2013-05-09 18:48 Updated by: nishimoto
Comment

上記でコメントした現象について、簡単に確認したこと:

  • 日本語設定「日本語版の文字入力拡張」はオフにしても状況は同じ。
  • 入力メソッド設定「選択した候補を通知」「候補の通知で文字を説明」をオフにすると挙動が変わる。(読めない項目はあるが、「大文字」あるいは無関係な文字説明を読み上げなくなる)
2013-05-09 21:32 Updated by: nishimoto
Comment

Windows 7 64ビットで起きている現象は、本家 2013.1rc2 でも再現されました。

また下記の環境でも確認できました。

  • Windows XP sp3 (テキストサービスは無効にしない、すべてのアプリに拡張しない)
  • NVDA日本語版 jpdev130509
  • ATOK 2013
  • スタートメニューでカーソルを左右に移動すると「インターネット」「マイドキュメント」の項目を交互に読み上げるが、スピーチビューワーで確認すると「大文字(何か読めない文字列)」が毎回出力されている。

以下の不具合のそれぞれについて対応を検討してみます。

  • IME の処理が不適切なタイミングで、あるいは不適切に、変換候補を取得・通知しようとする問題
  • 日本語の文字説明において、音声エンジンが読めない文字が upper と判定されて「大文字」だけが読み上げられてしまう問題

前者は本家の入力メソッドの実装の問題として、本家にフィードバックが必要と思われます。

2013-05-09 22:03 Updated by: nishimoto
Comment

下記の git コミットで、大文字の判定で Python のメソッドを使わない方法に変更しました。

nvdajp releases-2013.1jp 97ced2d

この状況で「日本語版の文字入力拡張」を有効にして、変換候補の番号を通知しない設定にすると、不要な文字列は(スピーチビューワーで見ると消えていないのですが)気になりにくくなったと思います。

2013-05-10 09:40 Updated by: nishimoto
  • Summary Updated
Comment

「大文字」だけでなく「ロシア」「半角」と読むこともあるので、概要を変更しました。

2013-05-11 00:11 Updated by: nishimoto
Comment

Windows XP sp3 で handleInputCandidateListUpdate() に渡されている値を調べてみました。

下記、使ったパッチと、正常に候補リストを取り出した例、不適切な文字列の例です。IME は ATOK 2013 と Google 日本語入力です。

この状況の nvdaControllerInternal_inputCandidateListUpdate() は nvdaHelper/remote/ime.cpp:345 で実行されています。

diff --git a/source/NVDAHelper.py b/source/NVDAHelper.py
index 284b6cb..b7e97eb 100755
--- a/source/NVDAHelper.py
+++ b/source/NVDAHelper.py
@@ -239,6 +239,7 @@ def nvdaControllerInternal_inputCompositionUpdate(compositionString,selectionSta
        return 0

 def handleInputCandidateListUpdate(candidatesString,selectionIndex,inputMethod):
+       log.info(u"(%s) (%s) (%s)" % (unicode(candidatesString).replace('\n','|'),str(selectionIndex),unicode(inputMethod)))
        candidateStrings=candidatesString.split('\n')
        import speech
        from NVDAObjects.inputComposition import InputComposition
, CandidateList, CandidateItem
INFO - NVDAHelper.handleInputCandidateListUpdate (23:10:52):
(完治|全治|全快|全癒|根治|快気|治す|癒す|癒える) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:12:31):
(カンジ|漢字|観じ|感じ|幹事|貫地|監事|かんじ|完二) (1) (GIMEJA.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:08:22):
(ŸīŸī) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:08:43):
(Ÿī솠ī) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:08:43):
(Ÿī䍀ń) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:08:44):
(Ÿī솠ī) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:08:46):
(Ÿī蒠ń) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:08:47):
(Ÿī藨ń) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:09:39):
(Ÿī蚈ń) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:09:40):
(ŸÆ꡸Æ) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:10:12):
(ŸÆ둨Æ) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:10:29):
(Ÿī鄐ń) (0) (ATOK26W.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (23:10:32):
(ŸŃ뒰Ń) (0) (ATOK26W.IME)

INFO - NVDAHelper.handleInputCandidateListUpdate (23:13:38):
(ɘŃɘŃ!ƨŃ⹐ɖ­) (0) (GIMEJA.IME)
INFO - NVDAHelper.handleInputCandidateListUpdate (00:03:39):
(첈Şing Windows version sys.getwindowsversion(major=5, minor=1, build=2600, platform=2) (0) (GIMEJA.IME)
2013-05-11 11:26 Updated by: nishimoto
Comment

下記のコミットで ime.cpp の修正を行い、現在テスト中です。

nvdajp release-2013.1jp f204633

本家の nvda-dev にも ime.cpp のパッチのレビューを依頼しました。

2013-05-14 22:55 Updated by: nishimoto
Comment

本家にチケットを立てました:

3234 Memory allocation issue in ime.cpp http://community.nvda-project.org/ticket/3234

2013-05-19 00:41 Updated by: nishimoto
  • Status Update from Open to Closed
  • Milestone Update from (None) to 2013.1jp (closed)
  • Ticket Close date is changed to 2013-05-19 00:41
  • Resolution Update from None to Fixed
Comment

本家の 2013.1 には間に合わなかったのですが 2013.1jp としては対応完了とします。

2013-05-28 21:17 Updated by: nishimoto
Comment

気づくのが遅れたのですが、Mick さんからパッチの確認依頼がありました。

http://community.nvda-project.org/ticket/3234 http://community.nvda-project.org/attachment/ticket/3234/3234_IMELen.patch

マイルストーンが 2013.1.1 になっています。

2013-05-28 22:04 Updated by: nishimoto
Comment

本家ブランチにパッチをあてたものを Windows XP と ATOK 2013 で確認しました。

直ってなかったのでコメントを書きました。

http://community.nvda-project.org/ticket/3234#comment:4

2013-06-11 09:42 Updated by: nishimoto
Comment

Mick さんからコメントが付きました。

バグの再現環境が作れなくて苦戦しているようです。

Google Japanese Input の設定画面がアクセシブルでないことも指摘されています。

http://community.nvda-project.org/ticket/3234#comment:7

2013-06-13 14:19 Updated by: nishimoto
Comment

メモリアロケーションのときに calloc を使うようにして、サイズをチェックする処理を追加して、作業を行った結果を下記にコメントしました。

http://community.nvda-project.org/ticket/3234#comment:9

2013-06-14 15:26 Updated by: nishimoto
Comment

Mick さんが「2013.2をターゲットにする」として、新しいパッチを作成しました。

私が提案した修正(必要なメモリサイズを計算してからアロケートする処理)と、もともとの IMM 系 API の使い方の修正の両方が行われています。

こちらでは Windows XP と Windows 7 32ビットで、フォーカス移動時の不具合がないことを確認して、報告をしました。

http://community.nvda-project.org/ticket/3234#comment:13

このパッチが本家 master にマージされたら、日本語版のコードもこの処理に合わせようと思います。

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login