2014-09-21 92 views
1

所以我写了一个扩展,它有一些偏好。 我使用convenience.js(如描述的here)将首选项存储在GSettings中。 相关的代码如下所示:Gnome-Shell扩展,观察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标签排序 - 模式

为了确保我真的设置了我想要的值。

但这里涉及到我的问题,当我尝试捕获对这些设置所做的更改以反映它们在我的代码中时。从我在其他扩展所看到的,我猜应该是这个样子:

_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 - 消息:JS日志:[_sortModeChanged] new sortMode:最近最近使用

此外,我绝对不知道如何调试这种事情(即使在LookingGlass中...)。如果有人能指出我愚蠢的错误,或者给出一些关于如何调试这种事情的指示器,那将非常感激!

回答

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通道来支持:#irc.gnome.org上的#gnome-shell

+0

Humm,来想一想,因为你传递的是函数的引用,所以这可能不是问题。 – Tudmotu 2014-09-21 11:23:48

+0

感谢您的时间!不幸的是,这并不能解决问题(如果是这样,我应该总是在日志中看到带有“[_sortModeChanged]”的行)。当我得到时间时,我会试着询问IRC – KrahnacK 2014-09-21 16:10:47

+0

对于没有任何帮助,我表示抱歉= \您是否在日志中看到任何内容? – Tudmotu 2014-09-22 10:26:00