デスクトップ版Skype 6がWindows8でフリーズする
Skype 6.2 が公開されました。
INTERNET Watch の記事: http://internet.watch.impress.co.jp/docs/news/20130214_587715.html
安定性が改善されたかどうかは未検証ですが、チケットのタイトルを変更します。
UIA を Windows 8 で無効にするとフリーズは回避できるようですが、いろいろ悪影響もあります。
本家チケット 2746
http://community.nvda-project.org/ticket/2746
に jteh さんが添付している unregUIAEvents.py グローバルプラグインを、NVDA 日本語ベータ版 2013.1jp-beta2 (電子署名あり)で試してみました。
どうやら NVDA+Shift+1 (UIA ToolTipOpened の登録解除)を使うと、Tabキーでユーザー検索のエディットボックスにフォーカスしたときのフリーズが解決するようです。
NVDA+Shift+2 だけ使ったときにはやはりエディットボックスでフリーズします。
テスト環境 Windows 8 (64bit) + デスクトップ用 Skype 6.2.60.106 + ATOK 2013
他にも Skype がフリーズしやすいタイミングがあるかも知れません。
NVDA本家版でも確認してみます。
本家チケット 3036 NVDA not reading first letters in the edit field when searching for contacts in skype 6.2. http://community.nvda-project.org/ticket/3036
ここで議論されている TAccessibleEdit コントロールは、フォーカスがあたるとフリーズする「ユーザー検索のエディットボックス」が当てはまります。
ただ、このチケットで解決策とされている修正 (Branch nvda/main: Rev 5981)は(少なくとも Windows 8 日本語環境では)適用しても、やはりフリーズします。
テスト環境を Skype 6.3.59.105 に更新しましたが、状況は変わりません。(unregUIAEventsでNVDA+Shift+1する、UIAをグローバルに無効化すれば解決する、という状況)
jteh さんの unregUIAEvents.py から判断したのですが、下記の変更で Skype の検索ボックス TAccessibleEdit でのフリーズは回避できるようです。
diff --git a/source/_UIAHandler.py b/source/_UIAHandler.py index 798a936..5f560ab 100644 --- a/source/_UIAHandler.py +++ b/source/_UIAHandler.py @@ -102,7 +102,7 @@ UIAEventIdsToNVDAEventNames={ UIA_SelectionItem_ElementRemovedFromSelectionEventId:"stat eChange", #UIA_MenuModeEndEventId:"menuModeEnd", #UIA_Text_TextSelectionChangedEventId:"caret", - UIA_ToolTipOpenedEventId:"alert", +# UIA_ToolTipOpenedEventId:"alert", #UIA_AsyncContentLoadedEventId:"documentLoadComplete", #UIA_ToolTipClosedEventId:"hide", }
下記の git コミットで「日本語設定」に「Windows 8 トースト通知」という設定を追加し、デフォルトを無効にしました。
nvdajp release-2013.1jp 2038dcd
要するに Windows 8 トースト対応と、Skype 6.3 のバグ回避か、どちらかをユーザーに選んでいただく、という方針です。
本家のチケット 2712 が Skype のフリーズを扱っています。 http://community.nvda-project.org/ticket/2712
Skype のバグレポートが下記の通り登録されています。 https://jira.skype.com/browse/SCW-4107
Skype のバグフィックスは時間の問題と思いますが、現時点では、たとえ機能を削っても、フリーズを回避できる設定で提供したいと思います。
Skype の app module に手を入れるアプローチも引き続き検討しますが、いつでも正式版がリリースできるように、当面この状態で開発スナップショットを作りたいと思います。
下記の git commit で対策方法を変更しました。
release-2013.1jp 1585f64
元々の _UIAHandler.py は本家の実装に戻しました。
「Windows 8 トースト通知」のチェックボックスのかわりに「Skypeフリーズ対策」というチェックボックスを作り、デフォルトを「有効」にしました。
このチェックボックスが有効のときには misono さんが実装してくださった新しい Skype の appModule を使用して、チェックなしのときには本家の skype.py のままになるようにしました。
この切替を行うために misono さんバージョンの skype.py (現時点の最新のひとつ前のもの)を _skypeWin8Hack.py とリネームして、オリジナルの skype.py の最後にモンキーパッチ処理を追加するようにしました。
本家が skype.py を更新したときに、この方針のほうがマージが容易になると思います。
skypeWin8Hack そのものがまだ更新される可能性がありますが、現状では、Skype が実行されていなければ Windows 8 のトーストは通知されるようになっています。
下記の git コミットで skypeWin8Hack を更新しました。
release-2013.1jp 00dbf2a
「Skype が実行されていなければ Windows 8 のトーストは通知される」という仕様はそのままです。
本チケットの作業において skype のアプリケーションモジュールを独自に更新したのですが、本家は 2013.2 に向けて下記のチケットの作業をしており、モジュールが大幅に書き換わっているので、念のために情報共有しておきます。
NVDA should read automatically incoming chat from Skype http://community.nvda-project.org/ticket/2298
変更したファイルを _skypeWin8Hack.py に分離したので、マージはうまくできると思うのですが。。
Skype 6.5.59.158 と NVDA 本家版の最新スナップショット release-2013.1-9175,c22133d で、連絡先検索のエディットがフリーズしないことを確認しました。
すでに本家 master ブランチの skype モジュールはかなり書き換わっていますが 2013.2jp で日本語版のSkypeフリーズ対策をもういちどマージするか、Skypeフリーズ対策を廃止して 6.5 の使用を推奨するか、2013.1.1jp が終わってから、検討したいと思います。
Windows 8(64ビット)+NVDA 2012.3.1jp インストール環境+デスクトップ版 Skype 6.1 の組み合わせで Skype がフリーズしたのでチケットにしておきます。
日本語版の開発スナップショットでは起きないのですが、「バージョンアップすると解決する」と宣言してよいかどうか、引き続き検証および情報収集したいと思います。
本家は Skype 6.1 対応で具体的な作業をしてはいないようですが、 Skype の最近の新機能(Facebook連携などメッセージ関連)にアクセシブルでない部分があるという情報を見ました。
余談ですが、Skype をスクリーンリーダーで使いやすくするツールとしてよく知られている Skype Tallking
https://code.google.com/p/skypetalking/
が開発を終了しているため、それに替わるツールとして GW Connect がよく紹介されており、NVDA でもうまく動くとされています。
http://www.gwmicro.com/App_Central/Apps/App_Details/?scriptid=1353