diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2015-10-21 13:47:03 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2015-10-21 13:59:50 +0200 |
commit | c20f48abc6a2662fec12cb7588c69ff8e3a5d7c7 (patch) | |
tree | bf961589051eb72add2e7d8a9336ef848110de45 /configmgr/source | |
parent | 1b5766f7c29f28349d8970e6437c8ab1ba994825 (diff) |
configmgr/dconf: Simplify Fleet Commander write-back mode
* Get rid of different dconf trees for reading and writing again; the one single
tree is /org/libreoffice/registry/.
* Trigger the special write-back mode when a file
$SYSUSERCONFIG/libreoffice/dconfwrite is present; then, ignore the default
user:!... entry in CONFIGURATION_LAYERS (i.e., don't use the
UserInstallation's registrymodifications.xcu) and instead write changes back
to the dconf tree.
Change-Id: I6b4d7251851da3fe7abbc9dcb080d57b278de96b
Diffstat (limited to 'configmgr/source')
-rw-r--r-- | configmgr/source/components.cxx | 29 | ||||
-rw-r--r-- | configmgr/source/dconf.cxx | 14 | ||||
-rw-r--r-- | configmgr/source/dconf.hxx | 2 |
3 files changed, 31 insertions, 14 deletions
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx index 90349886b4d4..c1aec0702788 100644 --- a/configmgr/source/components.cxx +++ b/configmgr/source/components.cxx @@ -537,9 +537,9 @@ Components::Components( } else if (type == "dconf") { if (url == "!") { modificationTarget_ = ModificationTarget::Dconf; - dconf::readLayer(data_, Data::NO_LAYER, false); + dconf::readLayer(data_, Data::NO_LAYER); } else if (url == "*") { - dconf::readLayer(data_, layer, true); + dconf::readLayer(data_, layer); } else { throw css::uno::RuntimeException( "CONFIGURATION_LAYERS: unknown \"dconf\" kind \"" + url @@ -579,11 +579,30 @@ Components::Components( throw css::uno::RuntimeException( "CONFIGURATION_LAYERS: empty \"user\" URL"); } + bool ignore = false; +#if ENABLE_DCONF if (write) { - modificationTarget_ = ModificationTarget::File; - modificationFileUrl_ = url; + OUString token( + expand("${SYSUSERCONFIG}/libreoffice/dconfwrite")); + osl::DirectoryItem it; + osl::FileBase::RC e = osl::DirectoryItem::get(token, it); + ignore = e == osl::FileBase::E_None; + SAL_INFO( + "configmgr", + "dconf write (<" << token << "> " << +e << "): " + << int(ignore)); + if (ignore) { + modificationTarget_ = ModificationTarget::Dconf; + } + } +#endif + if (!ignore) { + if (write) { + modificationTarget_ = ModificationTarget::File; + modificationFileUrl_ = url; + } + parseModificationLayer(write ? Data::NO_LAYER : layer, url); } - parseModificationLayer(write ? Data::NO_LAYER : layer, url); ++layer; //TODO: overflow } else { throw css::uno::RuntimeException( diff --git a/configmgr/source/dconf.cxx b/configmgr/source/dconf.cxx index 192eb8bba24f..cc307e47a845 100644 --- a/configmgr/source/dconf.cxx +++ b/configmgr/source/dconf.cxx @@ -39,8 +39,7 @@ extern "C" { // // * The node hierarchy (starting at component nodes with names like // "org.openoffice.Setup") maps to dconf paths underneath -// "/org/libreoffice/registry/system/" resp. -// "/org/libreoffice/registry/user/". +// "/org/libreoffice/registry/". // // * Component, group, set, and localized property nodes map to dconf dirs, // while property and localized value nodes map to dconf keys. @@ -217,9 +216,8 @@ private: DConfChangeset * changeset_; }; -OString getRoot(bool system) { - return "/org/libreoffice/registry/" - + (system ? OStringLiteral("system") : OStringLiteral("user")); +OString getRoot() { + return "/org/libreoffice/registry"; } bool decode(OUString * string, bool slash) { @@ -1550,7 +1548,7 @@ bool addModifications( } -void readLayer(Data & data, int layer, bool system) { +void readLayer(Data & data, int layer) { GObjectHolder<DConfClient> client(dconf_client_new()); if (client.get() == nullptr) { SAL_WARN("configmgr.dconf", "dconf_client_new failed"); @@ -1558,7 +1556,7 @@ void readLayer(Data & data, int layer, bool system) { } readDir( data, layer, rtl::Reference<Node>(), data.getComponents(), client, - getRoot(system) + "/"); + getRoot() + "/"); } void writeModifications(Components & components, Data & data) { @@ -1573,7 +1571,7 @@ void writeModifications(Components & components, Data & data) { } for (auto const & i: data.modifications.getRoot().children) { if (!addModifications( - components, cs, getRoot(false), rtl::Reference<Node>(), i.first, + components, cs, getRoot(), rtl::Reference<Node>(), i.first, data.getComponents().findNode(Data::NO_LAYER, i.first), i.second)) { diff --git a/configmgr/source/dconf.hxx b/configmgr/source/dconf.hxx index 1086c77a3dd4..f7f59703754c 100644 --- a/configmgr/source/dconf.hxx +++ b/configmgr/source/dconf.hxx @@ -19,7 +19,7 @@ namespace configmgr { namespace configmgr { namespace dconf { -void readLayer(Data & data, int layer, bool system); +void readLayer(Data & data, int layer); void writeModifications(Components & components, Data & data); |