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

标签 javascript gio gjs gnome-shell-extensions

所以我正在编写一个扩展,它有一些偏好。 我使用便利.js 将首选项存储在 GSettings 中(如所述 here )。 相关代码如下:

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 monitor org.gnome.shell.extensions.workspace-alt-tab sort-mode

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

但这就是我的问题,当我 try catch 对这些设置所做的更改以将它们反射(reflect)在我的代码中时。从我在其他扩展中看到的内容来看,我猜它应该看起来像这样:

   _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 中......)。如果有人能指出我的愚蠢错误,或者给出一些关于如何调试此类事情的指示,我将不胜感激!

最佳答案

从表面上看,您似乎正在覆盖 _settingsChanged 变量。 请注意,在 init() 中,您正在执行以下操作:

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

在这里,您实际上是使用 connect() 返回的值覆盖 _settingsChanged() 方法。 尝试将返回值保存在不同的属性中,将代码更改为:

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

请告诉我这是否可以解决您的问题。
另外,根据我在 Gnome-Shell 开发方面的痛苦经历(无文档),我发现最好使用 IRC channel 来获取支持:irc.gnome.org 上的#gnome-shell

关于javascript - Gnome-Shell 扩展,观察 GSettings 的变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25957431/

相关文章:

javascript - 如何在不重复代码的情况下显示2个相同的 Highcharts

python - Gio.MemoryInputStream 关​​闭时不释放内存

c - 使用 GIO 处理文件

javascript - 从 gjs 读取异步标准输出

gnome-3 - 以编程方式调用 Gnome Shell 快捷方式

javascript - 为什么 AJAX 请求所用的时间从 2 毫秒跳到 50 毫秒甚至更长?

javascript - 返回异常比在异步回调链中使用 try catch block 有什么优势?

c - 异步 GIO 服务器/客户端

使用 Javascript 和 gjs 进行 Unicode 文件 I/O?

javascript - 使用组件名称向每个 render() react 添加数据属性