1

だから私は拡張機能を書いていますが、それにはいくつかの設定があります。設定は、convenient.js を使用して GSettings に保存します (こちらで説明)。関連するコードは次のようになります。

const SETTINGS_APP_SORT_MODE = 'sort-mode';

this._settings = Convenience.getSettings("org.gnome.shell.extensions.workspace-alt-tab"); //get schema

this._settings.set_string(SETTINGS_APP_SORT_MODE,modeCapture); //set value
this._sortMode = this._settings.get_string(SETTINGS_APP_SORT_MODE); //get value

これまでのところうまく機能しており、コマンドも使用できます

gsettings モニター org.gnome.shell.extensions.workspace-alt-tab ソートモード

本当に必要な値を設定していることを確認するため。

しかし、ここで問題が発生します。これらの設定に加えられた変更をキャプチャして、コードに反映しようとするときです。他の拡張機能で見たものから、次のようになるはずだと思います。

   _init: function(params) {
      this._settingsChanged=
         this._settings.connect('changed',
            Lang.bind(this,this._settingsChanged)); //get notified on every schema change
      this._sortModeChangedId =
         this._settings.connect('changed::' + SETTINGS_APP_SORT_MODE,
            Lang.bind(this,this._sortModeChanged)); //get notified for sort-mode changes
      this._sortModeChanged(); //force initialization
    },


    _settingsChanged: function() {
       this._sortMode = this._settings.get_string(SETTINGS_APP_SORT_MODE);
       log("[_settingsChanged] new sortMode: "+this._sortMode);
    },
    _sortModeChanged: function() {
       this._sortMode = this._settings.get_string(SETTINGS_APP_SORT_MODE);
       log("[_sortModeChanged] new sortMode: "+this._sortMode);
    }

しかし、問題は、init から呼び出されたログ行しか表示されないことです。

Gjs-Message: JS LOG: [_sortModeChanged] new sortMode: most-recently-used

また、この種のものをデバッグする方法についてはまったくわかりません(LookingGlassでも...)。誰かが私のばかげた間違いを指摘したり、この種のものをデバッグする方法についていくつかの指針を与えたりすることができれば、それは大歓迎です!

4

1 に答える 1

1

見た目から、_settingsChanged 変数をオーバーライドしているようです。init()内部で次のことを行っていることに注意してください。

this._settingsChanged =
    this._settings.connect('changed',
        Lang.bind(this,this._settingsChanged)); //get notified on every schema change

ここでは、実際に_settingsChanged()は から返された値でメソッドをオーバーライドしていますconnect()。戻り値を別のプロパティに保存してみてください。コードを次のように変更してください。

this._settingsChangedId =
    this._settings.connect('changed',
        Lang.bind(this,this._settingsChanged)); //get notified on every schema change

問題が解決するかどうかお知らせください。
また、Gnome-Shell 開発 (ドキュメントなし) での私の耐え難い経験から、サポートには IRC チャネルを使用するのが最善であることがわかりました: #gnome-shell on irc.gnome.org

于 2014-09-21T10:58:03.523 に答える