2012-04-02 4 views
4

Ich baue gerade eine einfache Anwendung auf Gjs, die das Hintergrundbild meiner Gnome-Shell ändern sollte. Eine Lösung, wie dies mit dem gsettings-tool gemacht werden kann, finden Sie here.Kann dconf-Eintrag mit GSettings nicht ändern

Da ich eine Desktop-Anwendung erstellen möchte, möchte ich die org.gnome.desktop.background.picture-uri -Schlüssel mit Gio's GSettings-class ändern. Aber die Verwendung der set_X() -Methode ändert nicht den Wert des Schlüssels.

Dies ist mein Code, um den gsettings Wert zu ändern:

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"; 

den Wert Lese wie erwartet funktioniert, die is_writable() -Methode kehrt auch truetrue und die set_string() -Methode zurückgibt.

Ich habe überprüft, dass ich nicht im "Delay-Apply" -Modus bin und der Schlüssel hat eine GVariantType Zeichenfolge, so dass die set_string() -Methode funktionieren sollte.

Die Verwendung des normalen Befehlszeilenprogramms gsettings (wie im verknüpften Post erklärt) funktioniert einwandfrei.

Ich kann nicht herausfinden, was das Problem ist, gibt es einen Ort, an dem ich nach Protokollen oder etwas suchen kann?

Antwort

5

Nachdem ich hier keine Antworten erhalten habe, habe ich asked the same question on the gjs-mailing list.

Es stellte sich heraus, dass die Schreibvorgänge in dconf noch nicht auf der Festplatte waren, als mein Skript beendet wurde, so dass sie nie wirklich angewendet wurden.

Die Lösung war, die g_settings_sync() function (JsDoc) direkt nach der set_string() Funktion zu rufen, um sicherzustellen, dass alle Schreibvorgänge beendet wurden.

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

Dank Johan Dahlin und his answer.

+0

Ich habe mir seit gestern den Kopf über dieses Problem gebrochen und bin froh, endlich die Lösung gefunden zu haben. Vielen Dank! – Serrano

Verwandte Themen