summaryrefslogtreecommitdiff
path: root/configmgr/source/xcuparser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/source/xcuparser.cxx')
-rw-r--r--configmgr/source/xcuparser.cxx30
1 files changed, 17 insertions, 13 deletions
diff --git a/configmgr/source/xcuparser.cxx b/configmgr/source/xcuparser.cxx
index cd1e6e55d085..91f3b244c5a8 100644
--- a/configmgr/source/xcuparser.cxx
+++ b/configmgr/source/xcuparser.cxx
@@ -68,12 +68,13 @@ namespace css = com::sun::star;
XcuParser::XcuParser(
int layer, Data & data, Partial const * partial,
- Modifications * broadcastModifications):
+ Modifications * broadcastModifications, Additions * additions):
valueParser_(layer), data_(data),
partial_(partial), broadcastModifications_(broadcastModifications),
- recordModifications_(layer == Data::NO_LAYER),
+ additions_(additions), recordModifications_(layer == Data::NO_LAYER),
trackPath_(
- partial_ != 0 || broadcastModifications_ != 0 || recordModifications_)
+ partial_ != 0 || broadcastModifications_ != 0 || additions_ != 0 ||
+ recordModifications_)
{}
XcuParser::~XcuParser() {}
@@ -624,7 +625,7 @@ void XcuParser::handleLocpropValue(
pop = true;
}
if (trackPath_) {
- recordModification();
+ recordModification(false);
if (pop) {
path_.pop_back();
}
@@ -638,7 +639,7 @@ void XcuParser::handleLocpropValue(
locprop->getMembers().erase(i);
}
state_.push(State(true));
- recordModification();
+ recordModification(false);
break;
default:
throw css::uno::RuntimeException(
@@ -750,7 +751,7 @@ void XcuParser::handleUnknownGroupProp(
prop->setFinalized(valueParser_.getLayer());
}
state_.push(State(prop, name, state_.top().locked));
- recordModification();
+ recordModification(false);
break;
}
// fall through
@@ -800,7 +801,7 @@ void XcuParser::handlePlainGroupProp(
property,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- recordModification();
+ recordModification(false);
break;
case OPERATION_REMOVE:
if (!property->isExtension()) {
@@ -814,7 +815,7 @@ void XcuParser::handlePlainGroupProp(
}
group->getMembers().erase(propertyIndex);
state_.push(State(true)); // ignore children
- recordModification();
+ recordModification(false);
break;
}
}
@@ -863,7 +864,7 @@ void XcuParser::handleLocalizedGroupProp(
replacement, name,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- recordModification();
+ recordModification(false);
}
break;
case OPERATION_REMOVE:
@@ -1070,7 +1071,7 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
member->setFinalized(finalizedLayer);
member->setMandatory(mandatoryLayer);
state_.push(State(member, name, false));
- recordModification();
+ recordModification(i == set->getMembers().end());
}
break;
case OPERATION_FUSE:
@@ -1084,7 +1085,7 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
member->setFinalized(finalizedLayer);
member->setMandatory(mandatoryLayer);
state_.push(State(member, name, false));
- recordModification();
+ recordModification(true);
}
} else {
state_.push(
@@ -1104,15 +1105,18 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
set->getMembers().erase(i);
}
state_.push(State(true));
- recordModification();
+ recordModification(false);
break;
}
}
-void XcuParser::recordModification() {
+void XcuParser::recordModification(bool addition) {
if (broadcastModifications_ != 0) {
broadcastModifications_->add(path_);
}
+ if (addition && additions_ != 0) {
+ additions_->push_back(path_);
+ }
if (recordModifications_) {
data_.modifications.add(path_);
}