【问题标题】:Gnome-Shell Extension, observe changes on GSettings?Gnome-Shell 扩展,观察 GSettings 的变化?
【发布时间】:2014-11-15 10:28:26
【问题描述】:

所以我正在编写一个扩展程序,它有一些偏好。 我使用便利.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 排序模式

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

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

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

另外,我完全不知道如何调试这种东西(即使在 LookGlass 中......)。如果有人可以指出我的愚蠢错误,或者就如何调试这类事情提供一些指示,将不胜感激!

【问题讨论】:

    标签: javascript gio gjs gnome-shell-extensions


    【解决方案1】:

    从外观上看,您似乎正在覆盖 _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 频道来获得支持:#gnome-shell on irc.gnome.org

    【讨论】:

    • 嗯,想想看,既然你传递的是对函数的引用,这可能根本不是问题。
    • 感谢您的宝贵时间!不幸的是,这并不能解决问题(如果是,我应该总是在日志中看到带有“[_sortModeChanged]”的行......)。有时间我会尝试在 IRC 上提问
    • 很抱歉没有提供更多帮助 =\ 您在日志中看到什么了吗?
    • 没问题,这只是一个爱好项目,没有压力:) 我真的很感谢你的帮助!谢谢!我还没有时间进入它并在 IRC 上询问,在初始化阶段之后我看到的日志几乎是空的,这实际上是告诉我它不起作用......当我知道更多时,我会及时通知你
    猜你喜欢
    • 2012-09-01
    • 2021-12-24
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多