Не могу изменить dconf-запись с GSettings - PullRequest
4 голосов
/ 03 апреля 2012

В настоящее время я создаю простое приложение для Gjs , которое должно изменить фоновое изображение моей оболочки gnome. Решение о том, как это можно сделать с помощью gsettings -инструмента, можно найти здесь .

Поскольку я хочу построить на нем настольное приложение, я хочу изменить ключ org.gnome.desktop.background.picture-uri с помощью класса GSettings класса Gio . Но использование set_X() -метода не меняет значение ключа.

Это мой код для изменения значения gsettings:

var gio = imports.gi.Gio;

// Get the GSettings-object for the background-schema:
var background = new gio.Settings({schema: "org.gnome.desktop.background"});

// Read the current Background-Image:
print( "Current Background-Image: "+background.get_string("picture-uri") );

if (background.is_writable("picture-uri")){
    // Set a new Background-Image (should show up immediately):
    if (background.set_string("picture-uri", "file:///path/to/some/pic.jpg")){
        print("Success!");
    }
    else throw "Couldn't set the key!";
} else throw "The key is not writable";

Считывание значения работает должным образом, метод is_writable() возвращает true, а метод set_string() также возвращает true.

Я проверил, что я не нахожусь в режиме "задержки-применения", и ключ имеет GVariantType строки, поэтому метод set_string() должен работать.

Использование обычного инструмента командной строки gsettings (как описано в связанном посте) работает просто отлично.

Я не могу понять, в чем проблема, есть ли место, где я могу искать логи или что-то в этом роде?

1 Ответ

5 голосов
/ 03 апреля 2012

После того, как я не получил никаких ответов, я задал тот же вопрос в списке рассылки gjs .

Оказалось, что записи в dconf еще не было на диске, когда мой сценарий завершился, поэтому они так и не были применены.

Решением было вызвать g_settings_sync()Функция ( JsDoc ) сразу после функции set_string(), чтобы убедиться, что все записи завершены.

if (background.set_string("picture-uri", "file:///path/to/some/pic.jpg")){
    gio.Settings.sync()
    print("Success!");
}

Благодаря Йохану Далину и его ответу .

...