glib — редактировать настройки в переполнении стека

Я пытаюсь редактировать 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;
}

Заранее спасибо.

0

Решение

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

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

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]