[userChrome.js] 軽量マウスジェスチャをMacに対応させる

9/1 訂正 やはり以前作った Linux 対応版でも、マウスジェスチャのみのバージョンは Mac にも対応していたようである。ただ、ロッカージェスチャ・ホイールジェスチャ機能追加版の方は Mac では動作せず、その原因は Mac で右クリックしたときの mouseup イベントが「event.button == 2」で判断不可で、代わりに「event.button == 0 && event.ctrlKey」としなければならないためであるようだ。

以前 userChrome.js 版マウスジェスチャを Linux 対応させたとき、勢い余って Mac にも対応と書いてしまっていたが実際はロッカージェスチャ・ホイールジェスチャ機能追加版の方は Mac では動作していなかった。ところが、 Windows / Linux で右クリックの mouseup イベントを「event.button == 2」として判断している箇所を、Mac ではCtrlキー+左クリックされたと読み替えて「event.button == 0 && event.ctrlKey」とすることでうまくいくようだ(筆者は未確認ですが)。そこで、下記の青字で示した部分が追加される。

ロッカージェスチャ・ホイールジェスチャ対応版

    _lastX: 0,
    _lastY: 0,
    _directionChain: "",
    _isMac: false,    // for Mac

    init: function()
    {
        this._isMac = navigator.platform.indexOf("Mac") == 0;
        gBrowser.mPanelContainer.addEventListener("mousedown", this, false);
        gBrowser.mPanelContainer.addEventListener("mousemove", this, false);
        gBrowser.mPanelContainer.addEventListener("mouseup", this, false);
        gBrowser.mPanelContainer.addEventListener("contextmenu", this, true);
            case "mouseup": 
                // [3] ジェスチャ終了~アクション実行
                if ((this._isMouseDownR && event.button == 2) || 
                    (this._isMouseDownR && this._isMac && event.button == 0 && event.ctrlKey)) {
                    this._isMouseDownR = false;
                    if (this._directionChain)
                        this._suppressContext = true;

TOP

5 Comments to “[userChrome.js] 軽量マウスジェスチャをMacに対応させる”

tsukkee:

私の手元のMac(Mac OS X 10.4.10 Intel, Firefox 2.0.0.6)では,以前のLinux対応版で動いています.ただ,ホイールジェスチャーとロッカージェスチャーが追加されたバージョンは正しく動いていないです.

このページのスクリプトは正常に動作しています。

> 以前のLinux対応版で動いています.
http://www.xuldev.org/blog/?p=101
↑こちらのスクリプトだと
case “mouseup”:
// [3] ジェスチャ終了~アクション実行
if (this._isMouseDown) {
となっているのでMacでも動作しますね。

そういえば、Macでもmousedownイベント時では、
左クリック(クリック)のevent.buttonの値は0、
右クリック(control+クリック)のevent.buttonの値は2でした。

なるほど!結論としては、以下のようになりますでしょうか。

  1. マウスジェスチャのみ版は以前のLinux対応版でもMacで動作する
  2. ロッカージェスチャ・ホイールジェスチャ対応版は以前のLinux対応版では動作しない
    その理由は、右クリックのmouseupの判断を「event.button == 2」で行なっているからである。

したがって、このエントリの「マウスジェスチャのみ版」の変更は不要で、「ロッカージェスチャ・ホイールジェスチャ対応版」の変更は「case “mouseup”:」以降の箇所だけで良いということになりますね。

tsukkee:

Macでもロッカージェスチャ・ホイールジェスチャ動きました!
Mac対応どうもありがとうございます!

ただし,
http://www.xuldev.org/misc/script/MouseGestures2.uc.js
に上がっているファイルの
this._isMac = navigator.platform.indexOf(“Mac”) == 0;
の位置がinit()内にあるべきところがuninit()内になっているのでそこだけ修正しました.

あと,ものすごく稀な状況ですが,Vimperatorという拡張が入っていると
XULBrowserWindow.statusTextFieldlabel = …
の箇所が失敗するので,
document.getElementById(‘statusbar-display’).label = …
にするとそれっぽい動作となりました.Vimperator自体がキーボードでFirefoxを
操作するための拡張なので両方入れる時点で矛盾していますが,
私はノートパソコンでマウスがあるときはマウスジェスチャでないときはVimperatorと
使い分けているので,こんなことになってしまいました(^-^;)

> init()内にあるべきところがuninit()内になっている
ご指摘ありがとうございます。これはとんでもないミスでした。早速修正しました。

> document.getElementById(‘statusbar-display’).label
これも本来ならそうすべきなので、近々修正する予定です。

ところで、現在試作中のマウスジェスチャ・ロッカージェスチャ・ホイールジェスチャなどなどGUI付き多機能版のMacでの動作確認にもしご協力いただけるのであればメールください。

TOP

TOP