diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-25 09:34:24 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-01-25 09:45:36 +0100 |
commit | 621893a1bec2c4d566d06724672a6136e00c6a67 (patch) | |
tree | b8c6bcbdd6d582d572dcfd3753f493ac25e267e0 /tools | |
parent | 6722623d62a9bb0e13c427fd677a79368aeefe9a (diff) | |
download | msitools-621893a1bec2c4d566d06724672a6136e00c6a67.tar.gz msitools-621893a1bec2c4d566d06724672a6136e00c6a67.tar.xz msitools-621893a1bec2c4d566d06724672a6136e00c6a67.zip |
wixl: improve automatic detection of the key path
Also detect multiple elements with keyPath="yes".
Diffstat (limited to 'tools')
-rw-r--r-- | tools/wixl/builder.vala | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/tools/wixl/builder.vala b/tools/wixl/builder.vala index 8b3d994..2cf9ccd 100644 --- a/tools/wixl/builder.vala +++ b/tools/wixl/builder.vala @@ -347,10 +347,19 @@ namespace Wixl { buffer[12], buffer[13], buffer[14], buffer[15]); } + WixKeyElement? component_default_key = null; + int component_children_count; + public override void visit_component (WixComponent comp, VisitState state) throws GLib.Error { var attr = 0; - if (state == VisitState.ENTER) + if (state == VisitState.ENTER) { + component_default_key = null; + component_children_count = 0; return; + } + + if (comp.key == null && component_default_key != null) + comp.key = component_default_key; if (comp.key is WixRegistryValue) attr |= ComponentAttribute.REGISTRY_KEY_PATH; @@ -483,8 +492,14 @@ namespace Wixl { return_if_fail (component != null); - if (component.key == null || parse_yesno (key.KeyPath)) + if (component_children_count++ == 0) + component_default_key = key; + if (parse_yesno (key.KeyPath)) { + component_default_key = null; + if (component.key != null) + throw new Wixl.Error.FAILED ("multiple elements have keyPath='yes'"); component.key = key; + } } enum RegistryValueType { |