在C ++中编辑gsettings

时间:2017-04-30 15:48:17

标签: c++ glib gnome gio gsettings

我试图通过C ++程序编辑gsetting。 我已经阅读了这个question,并且我能够获得价值。如果我尝试设置它(使用set_uint方法),似乎进行了更改(如果我重新读取它显示新值)但是,如果我手动检查,则不是这样。我是否必须应用编辑?还有什么?

示例代码:

#include <giomm/settings.h>
#include <iostream>

int main() {
    Glib::RefPtr<Gio::Settings> colorSetting = 
                  Gio::Settings::create("org.gnome.settings-daemon.plugins.color");
    Glib::ustring tempKey = "night-light-temperature";

    //Works!
    cout<<colorSetting->get_uint(tempKey)<<endl;

    //Seems to work
    colorSetting->set_uint(tempKey, (unsigned) 2300);

    //Reads new value correctly
    cout<<colorSetting->get_uint(tempKey)<<endl;

    return 0;
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

由于您的程序在设置值后几乎立即退出,因此GSettings中的异步写入机制可能在程序退出时没有将新值写入磁盘。

尝试在退出之前添加g_settings_sync()调用(我不知道它在giomm中是如何绑定的,但这就是C中调用的内容)。来自the documentation for g_settings_sync()

  

GSettings的写入是异步处理的。因此,在g_settings_set()返回的时间内,更改不太可能存在于磁盘上。

要明确的是,通常不需要g_settings_sync()电话;这只是必要的,因为你没有运行主循环。

另请参阅:G_Settings apply changesCan't change dconf-entry with GSettings,它们涵盖相同的问题,但是从C和JavaScript的角度来看。