Расширение Gnome-Shell, следите за изменениями в GSettings?

Итак, я пишу расширение, у которого есть некоторые предпочтения. Я сохраняю настройки в GSettings, используя файл comfort.js (как описано здесь). Соответствующий код выглядит следующим образом:

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: [_sortModeChanged] новый sortMode: последний использованный

Кроме того, я совершенно не представляю, как отлаживать подобные вещи (даже в LookingGlass...). Если кто-то может указать мне на мою глупую ошибку или дать несколько советов о том, как отлаживать такие вещи, я был бы очень признателен!


person KrahnacK    schedule 21.09.2014    source источник


Ответы (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 на irc.gnome .org

person Tudmotu    schedule 21.09.2014
comment
Хм, если подумать, поскольку вы передаете ссылку на функцию, это может быть вообще не проблема. - person Tudmotu; 21.09.2014
comment
Спасибо за ваше время! К сожалению, это не решает проблему (если бы это было так, я всегда должен видеть в логе строку с [_sortModeChanged]...). Я попробую спросить в IRC, когда будет время. - person KrahnacK; 21.09.2014
comment
Прошу прощения за то, что ничем больше не помог =\ Вы видите что-нибудь в логах? - person Tudmotu; 22.09.2014
comment
Нет проблем, это всего лишь хобби-проект, никакого давления :) Я очень ценю помощь! Спасибо! У меня еще не было времени, чтобы вникнуть в это и спросить в IRC, журналы, которые я вижу, в значительной степени пусты после фазы инициализации, это на самом деле то, что говорит мне, что это не работает ... Я буду держать вас в курсе, когда узнаю больше - person KrahnacK; 22.09.2014