diff options
-rw-r--r-- | editor/dconf-schema.vala | 33 | ||||
-rw-r--r-- | editor/dconf-view.vala | 21 |
2 files changed, 49 insertions, 5 deletions
diff --git a/editor/dconf-schema.vala b/editor/dconf-schema.vala index 8f3a70d..b074223 100644 --- a/editor/dconf-schema.vala +++ b/editor/dconf-schema.vala @@ -6,7 +6,7 @@ public class SchemaKey public Variant default_value; public SchemaValueRange? range; public SchemaValueRange type_range; - public List<Variant> choices; + public List<SchemaChoice> choices; public string? enum_name; public string? summary; public string? description; @@ -58,6 +58,8 @@ public class SchemaKey { for (var n = child->children; n != null; n = n->next) { + if (n->type != Xml.ElementType.ELEMENT_NODE) + continue; if (n->name != "choice") { warning ("Unknown child tag in <choices>, <%s>", n->name); @@ -82,8 +84,8 @@ public class SchemaKey Variant v; try { - v = Variant.parse(new VariantType(type), value); - choices.append (v); + v = new Variant(type, value); + choices.append (new SchemaChoice(value, v)); } catch (VariantParseError e) { @@ -95,6 +97,8 @@ public class SchemaKey { for (var n = child->children; n != null; n = n->next) { + if (n->type != Xml.ElementType.ELEMENT_NODE) + continue; if (n->name != "alias") { warning ("Unknown child tag in <aliases>, <%s>", n->name); @@ -123,7 +127,16 @@ public class SchemaKey continue; } - // FIXME: Use it + Variant v; + try + { + v = new Variant(type, target); + choices.append (new SchemaChoice(value, v)); + } + catch (VariantParseError e) + { + warning ("Invalid alias value '%s'", target); + } } } else if (child->type != Xml.ElementType.TEXT_NODE && child->type != Xml.ElementType.COMMENT_NODE) @@ -151,6 +164,18 @@ public class SchemaEnumValue : GLib.Object } } +public class SchemaChoice +{ + public string name; + public Variant value; + + public SchemaChoice(string name, Variant value) + { + this.name = name; + this.value = value; + } +} + public class SchemaValueRange { public Variant min; diff --git a/editor/dconf-view.vala b/editor/dconf-view.vala index 1725af1..2c57385 100644 --- a/editor/dconf-view.vala +++ b/editor/dconf-view.vala @@ -13,6 +13,22 @@ private class KeyValueRenderer: Gtk.CellRenderer set { _key = value; + + if (key.has_schema && key.schema.choices != null) + { + combo_renderer.text = key.value.print(false); + var model = new Gtk.ListStore(2, typeof(string), typeof(string)); + foreach (var choice in key.schema.choices) + { + Gtk.TreeIter iter; + model.append(out iter); + model.set(iter, 0, choice.name, 1, choice.value.print(false), -1); + } + combo_renderer.model = model; + mode = Gtk.CellRendererMode.EDITABLE; + return; + } + switch (key.type_string) { case "<enum>": @@ -39,7 +55,7 @@ private class KeyValueRenderer: Gtk.CellRenderer spin_renderer.text = key.value.print(false); var v = get_variant_as_double(key.value); double min = 0.0, max = 0.0; - if (key.schema != null && key.schema.range != null) + if (key.has_schema && key.schema.range != null) { min = get_variant_as_double(key.schema.range.min); max = get_variant_as_double(key.schema.range.max); @@ -118,6 +134,9 @@ private class KeyValueRenderer: Gtk.CellRenderer set {} get { + if (key.has_schema && key.schema.choices != null) + return combo_renderer; + switch (key.type_string) { case "<enum>": |