この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2015年6月)

2015年6月6日

Bug-org 1163304 Nighglty crashes at [@ nsEditor::EnsureComposition(mozilla::WidgetGUIEvent*) ]
初回投稿日時: 2015年06月06日14時27分43秒
カテゴリ: GTK Mozilla Core Mozilla41 バグ修正
SNS: (list)

Linux版のFirefoxでは、Altキーでメニューバーを表示し、続いて、文字入力のキーを押すことで、それに対応したメニューを開くことができます。しかし、検索バー等のエディタでサジェスト用のポップアップが既に開かれている状態で、なおかつIMEがオンになっている際にこの操作を行うとクラッシュするというバグです。

原因は、Altキーを押した際に疑似フォーカスがメニューバーに移動していないため、IMEの無効化が行われず、IMEが意図せずフォーカス済みのエディタを無視して動作してしまったために、Gecko内部での状態管理に矛盾が生じていたことにありました。

何故か、既にポップアップが開かれていると、メニューバーがアクティブになった際に、メニューバーのキーイベントリスナに主導権が渡されず、その結果、IMEStateManagerがIMEを無効化するタイミングを失っていました。

今回の修正では、メニューバーをアクティブにする前に、存在している全てのポップアップをまずは閉じるようにしました。これにより、UI上もユーザの混乱は無くなりますし、キーイベントの奪い合いも発生しなくなります。

ただし、この修正によって、存在しないとは思うのですが、ポップアップ上にメニューバーを設置しているアドオンはキーボードでそのメニューバーを開くことができなくなっています(しようとすると、そのポップアップ自体が閉じられてしまうため)。もし万が一そういうUIを持ったアドオンでこの問題を確認された方が居ましたら、bugzillaの方へ報告し、私にご一報ください。その場合、アクティブにしようとしてるメニューバーの親がポップアップかどうかを調査し、それより下位(見た目では上)にあるポップアップしか閉じないようにコードを追加します。

関連するかもしれないエントリ

bug-org 1163304を含むエントリ