0

レイズでアクティブ化された GNOME Shell 3.16 拡張機能については、AppSwitcherPopup._finishメソッドにモンキー パッチを適用しようとしています。のと同様に、パッチを適用したバージョンでは次のように呼び出しますthis.parent

function _modifiedFinish(timestamp) {
    // ...monkey-patched code...
    this.parent(timestamp);
}

function enable() {
    _originalFinish = AltTab.AppSwitcherPopup.prototype._finish;
    AltTab.AppSwitcherPopup.prototype._finish = _modifiedFinish;
}

(完全なコード)

しかし、コンソールでこのスタック トレースを取得します (実行中からgnome-shell --replace):

(gnome-shell:24452): Gjs-WARNING **: JS ERROR: TypeError: The method '_keyReleaseEvent' is not on the superclass
_parent@resource:///org/gnome/gjs/modules/lang.js:129
_modifiedFinish@/home/lastorset/.local/share/gnome-shell/extensions/Alt_Tab_Mod_Only_Raise_Activated_Window@dsboger.com.br/extension.js:34
SwitcherPopup<._keyReleaseEvent@resource:///org/gnome/shell/ui/switcherPopup.js:199
wrapper@resource:///org/gnome/gjs/modules/lang.js:169

この場合、SwitcherPopup._keyReleaseEventは を呼び出しthisており、サブクラスのインスタンスであるthis 必要があります。パッチを適用した後も同じはずだとAppSwitcherPopup思いますが、なぜ発信者に電話をかけようとしているのですか? this.parentさらに言えば、なぜそれが成功しないのでしょうか?

を生成したGJS コードを調べましたが、this.parent何が欠けているのかわかりません。

4

1 に答える 1

0

もう少し掘り下げた後、私はそれを修正する方法を見つけました。GJS クラス モデルでは、parent関数は実際にはメソッドの所有者のスーパークラスを探して、同じ名前のメソッドを呼び出します。すべての GJS クラスには、 を設定するwrapFunctionヘルパーがあるよう_ownerです。代わりにそれを使用して関数にパッチを適用しました。

AltTab.AppSwitcherPopup.prototype._finish = AltTab.AppSwitcherPopup.wrapFunction('_finish', _modifiedFinish);
于 2015-12-06T21:27:14.123 に答える