Редактировать настройки в 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.