Gnome-Shell扩展,观察GSettings的变化?

时间:2014-09-21 08:44:54

标签: javascript gio gjs gnome-shell-extensions

所以我正在写一个扩展,它有一些偏好。 我使用convenience.js(如here所述)将首选项存储在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 sort-mode

确保我确实按照自己的意愿设置了值。

但是,当我尝试捕获对这些设置所做的更改以在我的代码中反映它们时,我的问题就出现了。从我在其他扩展中看到的,我猜它应该看起来像这样:

   _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:最近使用的

另外,我完全不知道如何调试这种东西(即使在LookingGlass中......)。如果有人能指出我愚蠢的错误,或者就如何调试这类事情给出一些指示,那就非常感激了!

1 个答案:

答案 0 :(得分: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