Now browsing the archives for 4月, 2007.

Gran Paradiso Alpha 4 で FUEL 使用不可

使い方がよくわからないので色々試してみたけど時間の無駄だった。
Bug 379139 – FUEL 0.1: Component/typelibs need to be added to installer manifests

TOP

Linuxテスト環境導入 これまでの経緯

2月頃
拡張機能開発の際にFirefoxのプラットフォームに依存した挙動に頭を悩ませることが多くなり、Windows以外のテスト環境の必要性を切実に感じ始める。

3月20日
VMWare Player(無料)をインストールし、Ubuntu 6.10 VMWare Image 日本語版をダウンロードして起動。いとも簡単にWinXP上でLinuxやFirefoxが使用可能になった。特に何も設定せずにインターネットにもつながるし、Windowsとのファイル共有も可能で便利。しかし、メモリ256MBのせいかUbuntu起動に7~8分近くかかり、動作が極端に遅く、使い物にならない。

3月30日
メモリ512MB(6000円程度のバルク品)を購入して増設。VMWare上でのUbuntuの起動が2~3分程度に短縮され、動作もかなりマシになった。マウスポインタの動きが早すぎで焦るものの、「xset m 1 10」とかやって解決。とはいえ快適といえるほどではなく、とくにタブを切り替える動作なんかにモッサリ感を感じる。また、これはVMWare Player側の問題だけど、ウィンドウサイズを覚えてくれなくて起動するたびに800×600くらいにリセットされるのが微妙に嫌だったり、全画面表示中にマウスを上の方に持っていくと、青いツールバーが表示されるのがかなりウザかったり。多分無料版だからか?でもワンタッチでWinXPとLinuxを行き来できる利便性は半端じゃない。

4月15日
CDから起動が可能なLinuxであるKNOPPIXを試す。KNOPPIX 5.1のISOイメージをダウンロードしてCD-RWに焼き、PCを再起動してCDのドライブから起動させる。しかし”No suitable X-Server found for your card”というエラーが出てXが起動しない。少し調べて、起動時に「boot: dynabook」と打ち込むことで無事解決。今回はVMWare上ではないのでさすがに動作は快適である。しかしインターネットにつながらない(設定方法がよくわからない)、ファイルを編集して保存しても、あとでWindows上から内容を取り出せない(もしかしたら可能かも?)などといった問題があり、開発環境としては不足。でも、Ubuntuと比べて画面の雰囲気とかがWindowsに近い感じで好き。

4月16日
第三の方法として、WindowsとLinuxのデュアルブート環境構築を試案中。でもパーティションを切る必要があったりして、やったことない自分にはハードルが高そう。

TOP

nsIPopupBoxObject::enableKeyboardNavigator

通常、 ポップアップ (*1) を開いているときは、キーボードからの入力が効かなくなる。このキーイベント横取りは nsIPopupBoxObject::enableKeyboardNavigator(false) で無効化することができる。このメソッドは enableRollup 同様、 showPopup した直後に呼び出す必要がある。一方ツールチップ (*1) ではデフォルトでキーボード入力イベントの横取りはしないようになっている。

*1 ここでいうポップアップとは popup か tooltip 要素を showPopup メソッドの引数 popuptype を「popup」にして開いたものを指し、ツールチップとは引数 popuptype を「tooltip」にしたものを指す。

ところで、 Firefox 3 では nsIPopupBoxObject::setConsumeRollupEvent というメソッドも使用可能だが、これがどういう効果があるのかよくわからん。

TOP

nsIPopupBoxObject::enableRollup

通常、 ポップアップを開いているときは、Firefox のウィンドウ内のどの部分をクリックしてもクリックイベントが横取りされ、クリックイベントが発生する代わりにポップアップが閉じられる。この動作は nsIPopupBoxObject::enableRollup メソッドで変更が可能である。 enableRollup はポップアップを開いた後に呼び出す必要があることに注意。

ここでひとつプラットフォーム依存の悩ましい問題があり、 Windows では enableRollup(false) すると、ツールチップのようにポップアップ内に配置したボタンなどの要素がクリック不可となってしまう。

Windows 以外での環境での動作を知りたいので、テストケースを使った動作確認よろしくお願いします。
popup testcase


Windows + Firefox 2 では以下のようになるはずです。
Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3
[1] x | o
[2] o | x
[3] o | x
[4] o | x

Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.9a4pre) Gecko/20070405 Minefield/3.0a4pre
上記と同じ結果。

一方、Linux + Firefox 2 ではポップアップ内のボタンは常にクリック可能。
Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.1) Gecko/20060601 Firefox/2.0.0.1 (Ubuntu-edgy)
[1] x | o
[2] o | o
[3] o | o
[4] o | o
テストケースにはありませんが、 enableRollup(true) も試したところ、OKダイアログを閉じるときにクラッシュするバグがありました。

TOP

ポップアップとツールチップの仕様がOSによって違う (1への補足)

SCRAPBLOG : ポップアップとツールチップの仕様がOSによって違う (1) の補足

Windows + Firefox 2 で、以下の動作を確認。

1. テストケースを新しいタブで開く。
2. [popup as tooltip] か [tooltip as tooltip] ボタンを押してポップアップ・ツールチップを開く。
3. ツールチップを閉じずに別のタブへ切り替える。
4. [label] [menuitem] [button] [toolbarbutton] それぞれをクリックしてみる。

すると、なぜか4つすべての要素がクリック可能である。

TOP

ポップアップとツールチップの仕様がOSによって違う (2)

<tooltip> 要素には、マウスがツールチップ上から逃げたときに自動で閉じる仕組みがあるのだが、その挙動が Windows と Linux とで異なるのが悩ましい。

まず前回と同じテストケースを開き、 [tooltip as popup] か [tooltip as tooltip] ボタンをクリックしてツールチップを表示させる。次にツールチップ上へマウスを乗せてからツールチップの外へ移動する。
このとき、 Windows + Firefox 2 ではすぐにツールチップが閉じる。しかし、 Linux ではすぐには閉じず、さらにもう一度ツールチップ上に乗る→ツールチップ外へ移動を繰り返したときにツールチップが閉じる。この動きは果たして正しいのだろうか?

この <tooltip> 要素特有の自動で閉じる仕組みは XBL にて実装されていて chrome://global/content/bindings/popup.xml の <handler event=”mouseout”> を見ればわかる。
Windows では event.relatedTarget を調べてツールチップ外へ逃げたことを識別可能であるようだが、 Linux ではなぜか event.relatedTarget が null となり、代わりに _mouseOutCount の値が2になった時点でツールチップを閉じているようだ。

ソースコードのコメントを読むと、マウスがツールチップ上に乗った時点で _mouseOutCount が1となり、マウスがツールチップから逃げた時点で _mouseOutCount が2となってツールチップが閉じられるような仕組みを想定しているようだ。しかし、実際はマウスがツールチップに乗ったときに発生する mouseout イベントでは event.relatedTarget が null ではないため、 if (!rel) の条件は偽となって _mouseOutCount は増えない。したがって、 Linux では2回ツールチップ外へ逃げたときにツールチップが閉じるという挙動になっている。もしかしてこれはバグだろうか?

なお、Windows + Firefox 3 では、SCRAPBLOG : Bug 373518 – event.relatedTarget is never set when leaving popup にあるようにツールチップ外へ逃げたときの event.relatedTarget が null となるため、 Linux とまったく同じ動きになる。そもそも Bug 373518 自体もバグなのか何なのかよくわからなくなってきた。

例によってMacでの動作は未確認ですので、情報お待ちしております。

TOP