Bug-org 625151 Alt key sometimes fails to open Menu bar
初回投稿日時: 2012年02月15日17時31分28秒
カテゴリ: Mozilla Core Mozilla13 バグ修正
SNS:
Tweet (list)
Windowsで、Altキーを押しても、メニューバーが表示されないことがある、というバグです。MozillaZine.jpのフォーラムにあがってた報告からバグを探して修正しました。
再現条件を挙動から絞り込むのは難しかったのですが、コードを見ると分かりやすかったです。まず、Alt+Tabでウインドウがフォーカスを失う時にAltキーが押されているのかどうかを保存しているフラグがクリアされないケースがありました(というか、現状のUIだと基本的にはクリアされない)。ウインドウがフォーカスを失う時にはAltキーの状態を引き継ぐ必要が全くないはずなので、常にフラグをクリアするようにしました。もし、この部分の修正で問題があったとしても別のフラグを用意してどうにか対応すべき問題のように思えます。
さらに、IMMがインストールされている環境ではもうひとつ、未だに残っているハックがこのバグをメジャーなものにしていました。現在、GeckoはWM_IME_NOTIFY
をAltキーを押している間に受け取ると、`キー(半角/全角キー)のkeypress
イベントを生成します。メニューバーはこのキーイベントを受け取ると、Altキーを押している間に別のキー入力があったため、Altキーのkeyup
イベントでメニューバーをアクティブにする必要がないと判断するからです。ですので、この余計なイベントがAltキーによるメニューバーの表示操作はキャンセルされた、というフラグを無条件に立てていたため、次にウインドウがアクティブになった後、最初のAltキーのイベントをキャンセル済みであるとして処理しなくなっていました。
後者のもうひとつの原因は、Altキーのkeydown
時にはそもそもフラグを初期化すべきなはずですが、それをearly returnではないコードで書いたため、メンテナンスでフラグが増加したときにエンバグした感じです。正常ケースを、if
文をネストして深い位置に書こうとすると条件判定が複雑になりすぎてこういうことになるので、成功したかどうかではなく、失敗したかどうか判定して、とっとと処理から抜ける方がやはり合理的ですね。