Редактировать настройки в C++

Я пытаюсь редактировать gsetting через программу C++. Я прочитал этот вопрос, и я могу получить значение. Если я попытаюсь установить его (используя 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 ответ

Решение

Поскольку ваша программа завершает работу почти сразу после установки значения, вполне вероятно, что механизм асинхронной записи в GSettings не записал новое значение на диск к моменту выхода вашей программы.

Попробуйте добавить g_settings_sync() позвоните, прежде чем выйти (я не знаю, как это связано в giomm, но это то, что вызов в C). Из документации дляg_settings_sync():

Пишет в GSettings обрабатываются асинхронно. По этой причине очень маловероятно, что изменения произойдут на диске к тому времени. g_settings_set() возвращается.

Чтобы было ясно, g_settings_sync() звонить обычно не нужно; это необходимо только здесь, потому что вы не запускаете основной цикл.

См. Также: G_Settings применяет изменения и не может изменить dconf-entry с GSettings, которые охватывают ту же проблему, но с точки зрения C и JavaScript.

Другие вопросы по тегам