gschema-test/src/GLib.Settings.vala

65 lines
1.9 KiB
Vala

public static int main (string[] args) {
try {
// Custom location:
File exec_file = File.new_for_path (Environment.find_program_in_path (args[0]));
string settings_dir = Path.build_path (Path.DIR_SEPARATOR_S, exec_file.get_parent().get_parent().get_path(), "share/glib-2.0/schemas");
SettingsSchemaSource sss = new SettingsSchemaSource.from_directory (settings_dir, null, false);
SettingsSchema schema = sss.lookup ("org.example.glib-settings-schema-source", false);
if (sss.lookup == null) {
stdout.printf ("ID not found.");
return 0;
}
Settings settings = new Settings.full (schema, null, null);
// Default location: (XDG_DATA_DIRS)
// Settings settings = new Settings ("org.example.glib-settings-schema-source");
// Output: ``Hello, earthlings``
string greeting = settings.get_string ("greeting");
stdout.printf ("%s\n", greeting);
// Output: ``99``
int bottles = settings.get_int ("bottles-of-beer");
stdout.printf ("%d\n", bottles);
// Output: ``false``
bool lighting = settings.get_boolean ("lighting");
stdout.printf ("%s\n", lighting.to_string ());
// Change notification for any key in the schema
settings.changed.connect ((key) => {
print ("Key '%s' changed\n", key);
});
// Change notification for a single key
settings.changed["greeting"].connect (() => {
print ("New greeting: %s\n", settings.get_string ("greeting"));
});
// Setting keys
// Output:
// ``Key 'bottles-of-beer' changed``
// ``Key 'lighting' changed``
// ``Key 'greeting' changed``
// ``New greeting: hello, world``
settings.set_int ("bottles-of-beer", bottles - 1);
settings.set_boolean ("lighting", !lighting);
settings.set_string ("greeting", "hello, world");
stdout.puts ("\nPlease start 'dconf-editor' and edit keys in /org/example/my-app/\n");
new MainLoop ().run ();
} catch (Error e) {
stdout.printf ("Error: %s\n", e.message);
}
return 0;
}