summaryrefslogtreecommitdiff
path: root/desktop/source/lib/init.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'desktop/source/lib/init.cxx')
-rw-r--r--desktop/source/lib/init.cxx61
1 files changed, 38 insertions, 23 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index d6f209c2f1b8..f4e2c39f6d07 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -106,6 +106,7 @@
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/util/thePathSettings.hpp>
#include <com/sun/star/util/URLTransformer.hpp>
#include <com/sun/star/util/XFlushable.hpp>
#include <com/sun/star/configuration/theDefaultProvider.hpp>
@@ -7986,6 +7987,9 @@ static void preloadData()
// Set user profile's path back to the original one
rtl::Bootstrap::set(u"UserInstallation"_ustr, sUserPath);
+
+ // Note that unotools::Bootstrap has initialized from the temp UserInstallation at this point
+ // see Bootstrap::reloadData for when it gets resynced
}
namespace {
@@ -8177,29 +8181,6 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
if (eStage != PRE_INIT)
comphelper::LibreOfficeKit::setStatusIndicatorCallback(lo_status_indicator_callback, pLib);
- if (pUserProfileUrl && eStage != PRE_INIT)
- {
- OUString url(
- pUserProfileUrl, strlen(pUserProfileUrl), RTL_TEXTENCODING_UTF8);
- OUString path;
- if (url.startsWithIgnoreAsciiCase("vnd.sun.star.pathname:", &path))
- {
- OUString url2;
- osl::FileBase::RC e = osl::FileBase::getFileURLFromSystemPath(
- path, url2);
- if (e == osl::FileBase::E_None)
- url = url2;
- else
- SAL_WARN("lok", "resolving <" << url << "> failed with " << +e);
- }
- rtl::Bootstrap::set(u"UserInstallation"_ustr, url);
- if (eStage == SECOND_INIT)
- {
- comphelper::rng::reseed();
- utl::Bootstrap::reloadData();
- }
- }
-
OUString aAppPath;
if (pAppPath)
{
@@ -8231,6 +8212,40 @@ static int lo_initialize(LibreOfficeKit* pThis, const char* pAppPath, const char
if (osl::FileBase::getFileURLFromSystemPath(aAppPath, aAppURL) != osl::FileBase::E_None)
return 0;
+ if (pUserProfileUrl && eStage != PRE_INIT)
+ {
+ OUString url(
+ pUserProfileUrl, strlen(pUserProfileUrl), RTL_TEXTENCODING_UTF8);
+ OUString path;
+ if (url.startsWithIgnoreAsciiCase("vnd.sun.star.pathname:", &path))
+ {
+ OUString url2;
+ osl::FileBase::RC e = osl::FileBase::getFileURLFromSystemPath(
+ path, url2);
+ if (e == osl::FileBase::E_None)
+ url = url2;
+ else
+ SAL_WARN("lok", "resolving <" << url << "> failed with " << +e);
+ }
+
+ rtl::Bootstrap::set(u"UserInstallation"_ustr, url);
+ rtl::Bootstrap::set(u"BRAND_BASE_DIR"_ustr, aAppURL + "/..");
+ if (eStage == SECOND_INIT)
+ {
+ comphelper::rng::reseed();
+
+ utl::Bootstrap::reloadData();
+
+ // Now that bootstrap User/Shared installation paths have been (re)set to the final
+ // location, reinitialize the PathSettings so $(userurl)/$(instdir) path variables
+ // will be expanded using these newly set paths and not the paths detected during
+ // preinit which used unorthodox throwaway temp locations
+ uno::Reference<css::util::XPathSettings> xPathSettings = util::thePathSettings::get(xContext);
+ uno::Reference<lang::XInitialization> xReInit(xPathSettings, uno::UNO_QUERY_THROW);
+ xReInit->initialize({});
+ }
+ }
+
#ifdef IOS
// A LibreOffice-using iOS app should have the ICU data file in the app bundle. Initialize ICU
// to use that.