2012-04-02 7 views
4

私は現在Gjsに簡単なアプリケーションを構築しています。これは私のgnome-shellの背景イメージを変更するはずです。 gsettings -toolを使用してこれを行う方法の解決策はhereです。GSettingsでdconf-entryを変更できません

私はデスクトップアプリケーションを構築したいので、GioのGSettings-classを使用してorg.gnome.desktop.background.picture-uri -keyを変更したいと思います。しかし、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"; 

trueを返し、set_string() -methodもtrueを返し-method期待通りの仕事、is_writable()を行います。

私は「遅延適用」モードではないことを確認しました。キーにはGVariantTypeの文字列があるので、set_string()のメソッドが機能するはずです。

通常のgsettingsコマンドラインツールを使用すると(リンク先で説明したように)うまく動作します。

私は問題が何であるか把握できません。ログなどを探すことができる場所はありますか?

答えて

5

ここに回答が得られなかった後は、I asked the same question on the gjs-mailing list

スクリプトが終了したときにdconfへの書き込みがまだディスクになかったことが判明したため、実際には適用されませんでした。

解決策は、set_string()の直後にg_settings_sync() functionJsDoc)を呼び出して、すべての書き込みが完了したことを確認することでした。

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

Johan Dahlinとhis answerに感謝します。

+0

私は昨日からこの問題を克服してきましたが、最終的に解決策を見つけられたことをうれしく思います。ありがとう! – Serrano

関連する問題