Я пытаюсь редактировать 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;
}
Заранее спасибо.
Поскольку ваша программа завершает работу почти сразу после установки значения, вполне вероятно, что механизм асинхронной записи в GSettings
не записал новое значение на диск к моменту выхода вашей программы.
Попробуйте добавить g_settings_sync()
позвоните, прежде чем выйти (я не знаю, как это связано в giomm
, но это то, что вызов в C). От документация для g_settings_sync()
:
Пишет в
GSettings
обрабатываются асинхронно. По этой причине очень маловероятно, что изменения произойдут на диске к тому времени.g_settings_set()
возвращается.
Чтобы было ясно, g_settings_sync()
звонить обычно не нужно; это необходимо только здесь, потому что вы не запускаете основной цикл.
Смотрите также: G_Settings применяет изменения а также Не могу изменить dconf-запись с GSettings, которые охватывают ту же проблему, но с точки зрения C и JavaScript.
Других решений пока нет …