diff options
author | Daiki Ueno <dueno@src.gnome.org> | 2015-01-16 17:30:29 +0900 |
---|---|---|
committer | Daiki Ueno <dueno@src.gnome.org> | 2015-01-16 18:01:40 +0900 |
commit | 927311ecc396ecfed66c4da29cd45cdf5155d24f (patch) | |
tree | 721b3509f7a50bc229b83b47f5ceb19355978424 /libcaribou/xml-deserializer.vala | |
parent | 9e1e605a224b14b473c769e926208d157089b525 (diff) | |
download | caribou-927311ecc396ecfed66c4da29cd45cdf5155d24f.tar.gz |
libcaribou: Enable keyboard creation from a file
https://bugzilla.gnome.org/show_bug.cgi?id=690436
Diffstat (limited to 'libcaribou/xml-deserializer.vala')
-rw-r--r-- | libcaribou/xml-deserializer.vala | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/libcaribou/xml-deserializer.vala b/libcaribou/xml-deserializer.vala index 3e4cfe3..d16e41b 100644 --- a/libcaribou/xml-deserializer.vala +++ b/libcaribou/xml-deserializer.vala @@ -62,22 +62,21 @@ namespace Caribou { "Could not find layout file for %s %s", group, variant); } - public static GroupModel? load_group (string keyboard_type, - string group, string variant) { + public static GroupModel? load_group_from_file (string filename) { Xml.Doc* doc; try { - string fn = get_layout_file (keyboard_type, group, variant); - doc = Xml.Parser.parse_file (fn); + doc = Xml.Parser.parse_file (filename); if (doc == null) throw new IOError.FAILED ( - "Cannot load XML text reader for %s", fn); + "Cannot load XML text reader for %s", filename); } catch (GLib.Error e) { - stdout.printf ("Failed to load XML: %s\n", e.message); + stdout.printf ("Failed to load %s: %s\n", filename, e.message); return null; } - GroupModel grp = new GroupModel (group, variant); + // Use dummy group/variant names. + GroupModel grp = new GroupModel ("us", ""); Xml.Node* node = doc->children; create_levels_from_xml (grp, node); @@ -88,6 +87,26 @@ namespace Caribou { return grp; } + public static GroupModel? load_group (string keyboard_type, + string group, string variant) { + string filename; + try { + filename = get_layout_file (keyboard_type, group, variant); + } catch (GLib.Error e) { + stdout.printf ("Failed to load keyboard file %s/%s: %s\n", + keyboard_type, + GroupModel.create_group_name (group, variant), + e.message); + return null; + } + var grp = load_group_from_file (filename); + if (grp != null) { + grp.group = group; + grp.variant = variant; + } + return grp; + } + public static void create_levels_from_xml (GroupModel group, Xml.Node* node) { assert (node->name == "layout"); |