21#include <config_features.h>
22#include <config_feature_desktop.h>
23#include <config_feature_opencl.h>
24#include <config_java.h>
25#include <config_folders.h>
26#include <config_extensions.h>
27#include <config_wasm_strip.h>
43#if HAVE_FEATURE_UPDATE_MAR
52#include <com/sun/star/beans/XPropertySet.hpp>
53#include <com/sun/star/frame/theAutoRecovery.hpp>
54#include <com/sun/star/frame/theGlobalEventBroadcaster.hpp>
55#include <com/sun/star/frame/SessionListener.hpp>
56#include <com/sun/star/frame/XSynchronousDispatch.hpp>
57#include <com/sun/star/configuration/theDefaultProvider.hpp>
58#include <com/sun/star/util/XFlushable.hpp>
59#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
60#include <com/sun/star/frame/Desktop.hpp>
61#include <com/sun/star/frame/StartModule.hpp>
62#include <com/sun/star/view/XPrintable.hpp>
63#include <com/sun/star/awt/XTopWindow.hpp>
64#include <com/sun/star/util/URLTransformer.hpp>
65#include <com/sun/star/util/XURLTransformer.hpp>
66#include <com/sun/star/lang/ServiceNotRegisteredException.hpp>
67#include <com/sun/star/configuration/MissingBootstrapFileException.hpp>
68#include <com/sun/star/configuration/InvalidBootstrapFileException.hpp>
69#include <com/sun/star/configuration/InstallationIncompleteException.hpp>
70#include <com/sun/star/configuration/backend/BackendSetupException.hpp>
71#include <com/sun/star/configuration/backend/BackendAccessException.hpp>
72#include <com/sun/star/task/theJobExecutor.hpp>
73#include <com/sun/star/task/OfficeRestartManager.hpp>
74#include <com/sun/star/task/XRestartManager.hpp>
75#include <com/sun/star/document/XDocumentEventListener.hpp>
76#include <com/sun/star/office/Quickstart.hpp>
77#include <com/sun/star/system/XSystemShellExecute.hpp>
78#include <com/sun/star/system/SystemShellExecute.hpp>
79#include <com/sun/star/loader/XImplementationLoader.hpp>
89#include <uno/current_context.hxx>
95#include <officecfg/Office/Common.hxx>
96#include <officecfg/Office/Recovery.hxx>
97#include <officecfg/Office/Update.hxx>
98#include <officecfg/Setup.hxx>
99#include <osl/file.hxx>
100#include <osl/process.h>
101#include <rtl/byteseq.hxx>
103#if !ENABLE_WASM_STRIP_PINGUSER
106#include <rtl/bootstrap.hxx>
107#include <vcl/test/GraphicsRenderTests.hxx>
112#include <sfx2/sfxsids.hrc>
135#define WIN32_LEAN_AND_MEAN
142#define GETPID _getpid
148#include <strings.hxx>
159using namespace ::com::sun::star::system;
171#if HAVE_FEATURE_EXTENSIONS
203bool cleanExtensionCache() {
205 "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER
"/" SAL_CONFIGFILE(
"version")
":buildid}");
206 rtl::Bootstrap::expandMacros(buildId);
208 "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER
"/" SAL_CONFIGFILE(
"bootstrap")
209 ":UserInstallation}/user/extensions");
210 rtl::Bootstrap::expandMacros(extDir);
211 OUString buildIdFile(extDir +
"/buildid");
212 osl::File fr(buildIdFile);
213 osl::FileBase::RC rc = fr.open(osl_File_OpenFlag_Read);
215 case osl::FileBase::E_None:
217 rtl::ByteSequence s1;
218 rc = fr.readLine(s1);
219 osl::FileBase::RC rc2 = fr.close();
221 rc2 != osl::FileBase::E_None,
"desktop.app",
222 "cannot close " << fr.getURL() <<
" after reading: " << +rc2);
224 if (rc != osl::FileBase::E_None && rc != osl::FileBase::E_AGAIN) {
225 SAL_WARN(
"desktop.app",
"cannot read from " << fr.getURL() <<
": " << +rc);
229 reinterpret_cast< char const *
>(s1.getConstArray()),
230 s1.getLength(), RTL_TEXTENCODING_ISO_8859_1);
238 case osl::FileBase::E_NOENT:
241 SAL_WARN(
"desktop.app",
"cannot open " << fr.getURL() <<
" for reading: " << +rc);
246 "$UNO_USER_PACKAGES_CACHE/registry/"
247 "com.sun.star.comp.deployment.component.PackageRegistryBackend/unorc");
248 rtl::Bootstrap::expandMacros(userRcFile);
249 rc = osl::File::remove(userRcFile);
251 rc != osl::FileBase::E_None && rc != osl::FileBase::E_NOENT,
"desktop.app",
252 "cannot remove file " << userRcFile <<
": " << +rc);
253 rc = osl::Directory::createPath(extDir);
255 rc != osl::FileBase::E_None && rc != osl::FileBase::E_EXIST,
"desktop.app",
256 "cannot create path " << extDir <<
": " << +rc);
257 osl::File fw(buildIdFile);
258 rc = fw.open(osl_File_OpenFlag_Write | osl_File_OpenFlag_Create);
259 if (rc != osl::FileBase::E_None) {
260 SAL_WARN(
"desktop.app",
"cannot open " << fw.getURL() <<
" for writing: " << +rc);
268 rc = fw.write(buf.getStr(), buf.getLength(),
n);
270 (rc != osl::FileBase::E_None
271 ||
n !=
static_cast< sal_uInt32
>(buf.getLength())),
273 "cannot write to " << fw.getURL() <<
": " << +rc <<
", " <<
n);
276 rc != osl::FileBase::E_None,
"desktop.app",
277 "cannot close " << fw.getURL() <<
" after writing: " << +rc);
283bool shouldLaunchQuickstart()
292 bQuickstart = pLauncherItem->
GetValue();
297void SetRestartState() {
299 std::shared_ptr< comphelper::ConfigurationChanges > batch(
301 officecfg::Setup::Office::OfficeRestartInProgress::set(
true, batch);
303 }
catch (css::uno::Exception) {
308void DoRestartActionsIfNecessary(
bool quickstart) {
313 if (officecfg::Setup::Office::OfficeRestartInProgress::get()) {
314 std::shared_ptr< comphelper::ConfigurationChanges > batch(
316 officecfg::Setup::Office::OfficeRestartInProgress::set(
319 css::office::Quickstart::createStart(
321 shouldLaunchQuickstart());
323 }
catch (css::uno::Exception &) {
328void RemoveIconCacheDirectory()
331 OUString sUrl =
"${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER
333 rtl::Bootstrap::expandMacros(sUrl);
341void runGraphicsRenderTests()
343#if !ENABLE_WASM_STRIP_PINGUSER
354OUString MakeStartupErrorMessage(std::u16string_view aErrorMessage)
356 return DpResId(STR_BOOTSTRAP_ERR_CANNOT_START) +
"\n" + aErrorMessage;
369void FatalError(
const OUString& sMessage)
372 if ( sProductKey.isEmpty())
374 osl_getExecutableFile( &sProductKey.pData );
376 ::sal_uInt32 nLastIndex = sProductKey.lastIndexOf(
'/');
377 if ( nLastIndex > 0 )
378 sProductKey = sProductKey.copy( nLastIndex+1 );
381 OUString sTitle = sProductKey +
" - Fatal Error";
383 std::cerr << sTitle <<
": " <<
sMessage << std::endl;
392 return theCommandLineArgs;
405 if (sRet.indexOf(
"%PRODUCT") != -1 || sRet.indexOf(
"%ABOUTBOX") != -1)
407 sRet = sRet.replaceAll(
"%PRODUCTNAME", sBrandName );
408 sRet = sRet.replaceAll(
"%PRODUCTVERSION", sVersion );
409 sRet = sRet.replaceAll(
"%BUILDID", sBuildId );
410 sRet = sRet.replaceAll(
"%ABOUTBOXPRODUCTVERSIONSUFFIX", sAboutBoxVersionSuffix );
411 sRet = sRet.replaceAll(
"%ABOUTBOXPRODUCTVERSION", sAboutBoxVersion );
412 sRet = sRet.replaceAll(
"%PRODUCTEXTENSION", sExtension );
415 if ( sRet.indexOf(
"%OOOVENDOR" ) != -1 )
418 sRet = sRet.replaceAll(
"%OOOVENDOR", sOOOVendor );
425 : m_bCleanedExtensionCache(false)
426 , m_bServicesRegistered(false)
427 , m_aBootstrapError(BE_OK)
428 , m_aBootstrapStatus(BS_OK)
429 , m_firstRunTimer(
"desktop::Desktop m_firstRunTimer" )
443#if HAVE_FEATURE_EXTENSIONS
456 catch (css::uno::Exception & e)
484 catch (css::uno::Exception & e)
493 static bool bTryHardOfficeconfigBroken(
false);
495 if (bTryHardOfficeconfigBroken)
505#if defined(ANDROID) || defined(EMSCRIPTEN)
526 else if ( !rCmdLineArgs.
GetUnknown().isEmpty()
549 Reference< XComponent >(
553 ::comphelper::setProcessServiceFactory(
nullptr );
564 TOOLS_WARN_EXCEPTION(
"desktop.app",
"exception throwing during shutdown, will leave some garbage behind");
578 static constexpr OUStringLiteral SUSPEND_QUICKSTARTVETO =
u"SuspendQuickstartVeto";
581 Reference< XPropertySet > xPropertySet(xDesktop, UNO_QUERY_THROW);
582 xPropertySet->setPropertyValue( SUSPEND_QUICKSTARTVETO,
Any(
true) );
584 bool bExit = xDesktop->terminate();
588 xPropertySet->setPropertyValue( SUSPEND_QUICKSTARTVETO,
Any(
false) );
620 OUString aProductKey;
623 osl_getExecutableFile( &aProductKey.pData );
624 sal_uInt32 lastIndex = aProductKey.lastIndexOf(
'/');
626 aProductKey = aProductKey.copy( lastIndex+1 );
629 if ( !aTemp.isEmpty() )
632 OUString
const aMessage(OUString::Concat(aDiagnosticMessage) +
"\n");
635 VclMessageType::Warning, VclButtonsType::Ok, aMessage));
636 xBootstrapFailedBox->set_title(aProductKey);
637 xBootstrapFailedBox->run();
643 const OUString& aFileURL )
646 bool bFileInfo =
true;
648 switch ( nFailureCode )
651 case ::utl::Bootstrap::MISSING_INSTALL_DIRECTORY:
653 aMsg =
DpResId(STR_BOOTSTRAP_ERR_PATH_INVALID);
659 case ::utl::Bootstrap::MISSING_BOOTSTRAP_FILE:
661 aMsg =
DpResId(STR_BOOTSTRAP_ERR_FILE_MISSING);
667 case ::utl::Bootstrap::MISSING_BOOTSTRAP_FILE_ENTRY:
668 case ::utl::Bootstrap::INVALID_BOOTSTRAP_FILE_ENTRY:
670 aMsg =
DpResId(STR_BOOTSTRAP_ERR_FILE_CORRUPT);
675 case ::utl::Bootstrap::MISSING_VERSION_FILE:
677 aMsg =
DpResId(STR_BOOTSTRAP_ERR_FILE_MISSING);
682 case ::utl::Bootstrap::MISSING_VERSION_FILE_ENTRY:
684 aMsg =
DpResId(STR_BOOTSTRAP_ERR_NO_SUPPORT);
689 case ::utl::Bootstrap::MISSING_USER_DIRECTORY:
691 aMsg =
DpResId(STR_BOOTSTRAP_ERR_DIR_MISSING);
696 case ::utl::Bootstrap::INVALID_BOOTSTRAP_DATA:
698 aMsg =
DpResId(STR_BOOTSTRAP_ERR_INTERNAL);
703 case ::utl::Bootstrap::INVALID_VERSION_FILE_ENTRY:
706 aMsg =
"Invalid version file entry";
711 case ::utl::Bootstrap::NO_FAILURE:
720 OUString aMsgString( aMsg );
723 osl::File::getSystemPathFromFileURL( aFileURL, aFilePath );
725 aMsgString = aMsgString.replaceFirst(
"$1", aFilePath );
729 return MakeStartupErrorMessage( aMsg );
745 switch ( nFailureCode )
747 case ::utl::Bootstrap::MISSING_INSTALL_DIRECTORY:
748 case ::utl::Bootstrap::INVALID_BOOTSTRAP_DATA:
757 case ::utl::Bootstrap::MISSING_BOOTSTRAP_FILE_ENTRY:
758 case ::utl::Bootstrap::INVALID_BOOTSTRAP_FILE_ENTRY:
759 case ::utl::Bootstrap::MISSING_BOOTSTRAP_FILE:
761 OUString aBootstrapFileURL;
771 case ::utl::Bootstrap::INVALID_VERSION_FILE_ENTRY:
772 case ::utl::Bootstrap::MISSING_VERSION_FILE_ENTRY:
773 case ::utl::Bootstrap::MISSING_VERSION_FILE:
775 OUString aVersionFileURL;
783 case ::utl::Bootstrap::MISSING_USER_DIRECTORY:
785 OUString aUserInstallationURL;
792 case ::utl::Bootstrap::NO_FAILURE:
812 <<
"The application cannot be started.\n"
815 ?
"The component manager is not available.\n"
817 :
"The configuration service is not available.\n");
819 if ( !aErrorMessage.isEmpty() )
821 std::cerr <<
"(\"" << aErrorMessage <<
"\")\n";
825 OUString aDiagnosticMessage =
DpResId(STR_BOOTSTRAP_ERR_NO_CFG_SERVICE) +
"\n";
826 if ( !aErrorMessage.isEmpty() )
828 aDiagnosticMessage +=
"(\"" + aErrorMessage +
"\")\n";
834 aDiagnosticMessage +=
DpResId(STR_ASK_START_SETUP_MANUALLY);
836 FatalError(MakeStartupErrorMessage(aDiagnosticMessage));
848 OUString msg(
DpResId(STR_CONFIG_ERR_ACCESS_GENERAL));
849 if (!aErrorMessage.isEmpty()) {
850 msg +=
"\n(\"" + aErrorMessage +
"\")";
852 FatalError(MakeStartupErrorMessage(msg));
856 OUString aDiagnosticMessage =
DpResId(STR_BOOTSTRAP_ERR_USERINSTALL_FAILED);
857 FatalError(MakeStartupErrorMessage(aDiagnosticMessage));
861 OUString aDiagnosticMessage =
DpResId(STR_BOOTSTRAP_ERR_LANGUAGE_MISSING);
862 FatalError(MakeStartupErrorMessage(aDiagnosticMessage));
867 OUString aUserInstallationURL;
868 OUString aUserInstallationPath;
870 osl::File::getSystemPathFromFileURL( aUserInstallationURL, aUserInstallationPath );
872 OUString aDiagnosticMessage;
874 aDiagnosticMessage =
DpResId(STR_BOOTSTRAP_ERR_NOTENOUGHDISKSPACE);
876 aDiagnosticMessage =
DpResId(STR_BOOTSTRAP_ERR_NOACCESSRIGHTS);
877 aDiagnosticMessage += aUserInstallationPath;
879 FatalError(MakeStartupErrorMessage(aDiagnosticMessage));
887#if HAVE_FEATURE_BREAKPAD
888void handleCrashReport()
890 static constexpr OUStringLiteral SERVICENAME_CRASHREPORT =
u"com.sun.star.comp.svx.CrashReportUI";
892 css::uno::Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
894 Reference< css::frame::XSynchronousDispatch > xRecoveryUI(
895 xContext->getServiceManager()->createInstanceWithContext(SERVICENAME_CRASHREPORT,
xContext),
896 css::uno::UNO_QUERY_THROW);
898 Reference< css::util::XURLTransformer > xURLParser =
902 css::uno::Any aRet = xRecoveryUI->dispatchWithReturnValue(
aURL, css::uno::Sequence< css::beans::PropertyValue >());
911 css::uno::Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
913 Reference< css::frame::XSynchronousDispatch > xSafeModeUI(
914 xContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.comp.svx.SafeModeUI",
xContext),
915 css::uno::UNO_QUERY_THROW);
918 css::uno::Any aRet = xSafeModeUI->dispatchWithReturnValue(
aURL, css::uno::Sequence< css::beans::PropertyValue >());
940void impl_checkRecoveryState(
bool& bCrashed ,
941 bool& bRecoveryDataExists,
942 bool& bSessionDataExists )
944 bCrashed = officecfg::Office::Recovery::RecoveryInfo::Crashed::get()
945#if HAVE_FEATURE_BREAKPAD
946 || CrashReporter::crashReportInfoExists();
950 bool elements = officecfg::Office::Recovery::RecoveryList::get()->
953 = officecfg::Office::Recovery::RecoveryInfo::SessionData::get();
954 bRecoveryDataExists = elements && !session;
955 bSessionDataExists = elements && session;
958Reference< css::frame::XSynchronousDispatch > g_xRecoveryUI;
964 RefClearGuard(Ref& ref) :
m_Ref(ref) {}
965 ~RefClearGuard() {
m_Ref.clear(); }
973#if !ENABLE_WASM_STRIP_RECOVERYUI
974bool impl_callRecoveryUI(
bool bEmergencySave ,
975 bool bExistsRecoveryData)
977 constexpr OUStringLiteral COMMAND_EMERGENCYSAVE =
u"vnd.sun.star.autorecovery:/doEmergencySave";
978 constexpr OUStringLiteral COMMAND_RECOVERY =
u"vnd.sun.star.autorecovery:/doAutoRecovery";
980 css::uno::Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
983 xContext->getServiceManager()->createInstanceWithContext(
"com.sun.star.comp.svx.RecoveryUI",
xContext),
984 css::uno::UNO_QUERY_THROW);
985 RefClearGuard<Reference< css::frame::XSynchronousDispatch >> refClearGuard(g_xRecoveryUI);
987 Reference< css::util::XURLTransformer > xURLParser =
992 aURL.Complete = COMMAND_EMERGENCYSAVE;
993 else if (bExistsRecoveryData)
994 aURL.Complete = COMMAND_RECOVERY;
998 xURLParser->parseStrict(
aURL);
1000 css::uno::Any aRet = g_xRecoveryUI->dispatchWithReturnValue(
aURL, css::uno::Sequence< css::beans::PropertyValue >());
1007bool impl_bringToFrontRecoveryUI()
1009 Reference< css::frame::XSynchronousDispatch > xRecoveryUI(g_xRecoveryUI);
1010 if (!xRecoveryUI.is())
1013 css::util::URL
aURL;
1014 aURL.Complete =
"vnd.sun.star.autorecovery:/doBringToFront";
1015 Reference< css::util::XURLTransformer > xURLParser =
1017 xURLParser->parseStrict(
aURL);
1019 css::uno::Any aRet = xRecoveryUI->dispatchWithReturnValue(
aURL, css::uno::Sequence< css::beans::PropertyValue >());
1029void restartOnMac(
bool passArguments) {
1032#if HAVE_FEATURE_MACOSX_SANDBOX
1033 (void) passArguments;
1034 OUString aMessage =
DpResId(STR_LO_MUST_BE_RESTARTED);
1037 VclMessageType::Warning, VclButtonsType::Ok, aMessage));
1041 OSL_VERIFY(osl_getExecutableFile(&execUrl.pData) == osl_Process_E_None);
1044 if ((osl::FileBase::getSystemPathFromFileURL(execUrl, execPath)
1045 != osl::FileBase::E_None) ||
1046 !execPath.convertToString(
1047 &execPath8, osl_getThreadTextEncoding(),
1048 (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
1049 RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
1053 std::vector< OString >
args { execPath8 };
1055 if (passArguments) {
1056 sal_uInt32
n = osl_getCommandArgCount();
1057 for (sal_uInt32 i = 0;
i <
n; ++
i) {
1059 osl_getCommandArg(i, &arg.pData);
1060 if (arg.match(
"--accept=")) {
1064 if (!arg.convertToString(
1065 &arg8, osl_getThreadTextEncoding(),
1066 (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
1067 RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
1071 args.push_back(arg8);
1074 std::vector< char const * > argPtrs;
1075 for (
auto const& elem : args)
1077 argPtrs.push_back(elem.getStr());
1079 argPtrs.push_back(
nullptr);
1080 execv(execPath8.getStr(),
const_cast< char **
>(argPtrs.data()));
1081 if (errno == ENOTSUP) {
1084 execv(execPath8.getStr(),
const_cast< char **
>(argPtrs.data()));
1085 }
else if (pid > 0) {
1094 if (waitpid(pid, &stat, 0) == pid && WIFEXITED(stat)) {
1095 _exit(WEXITSTATUS(stat));
1102 (void) passArguments;
1106#if HAVE_FEATURE_UPDATE_MAR
1107bool isTimeForUpdateCheck()
1109 sal_uInt64 nLastUpdate = officecfg::Office::Update::Update::LastUpdateTime::get();
1112 sal_uInt64 n7DayInMS = 1000 * 60 * 60 * 12 * 1;
1113 if (nNow - n7DayInMS >= nLastUpdate)
1125 static bool bInException =
false;
1127#if HAVE_FEATURE_BREAKPAD
1128 CrashReporter::removeExceptionHandler();
1138 bInException =
true;
1142 bool bRestart =
false;
1143 bool bAllowRecoveryAndSessionManagement = (
1146 ( nCategory != ExceptionCategory::UserInterface ) &&
1149 if ( bAllowRecoveryAndSessionManagement )
1154#if !ENABLE_WASM_STRIP_RECOVERYUI
1155 bRestart = impl_callRecoveryUI(
1171 restartOnMac(
false);
1172#if !ENABLE_WASM_STRIP_SPLASH
1196 JVMloadThread() :
salhelper::Thread(
"Preload JVM thread")
1201 virtual void execute() override final
1205 Reference< css::loader::XImplementationLoader > xJavaComponentLoader(
1206 xSMgr->createInstance(
"com.sun.star.comp.stoc.JavaComponentLoader"),
1207 css::uno::UNO_QUERY_THROW);
1209 if (xJavaComponentLoader.is())
1211 const css::uno::Reference< ::com::sun::star::registry::XRegistryKey > xRegistryKey;
1214 xJavaComponentLoader->activate(
"",
"",
"", xRegistryKey);
1218 SAL_WARN(
"desktop.app",
"Cannot activate factory during JVM preloading");
1224struct ExecuteGlobals
1248 css::uno::ContextLayer layer( css::uno::getCurrentContext() );
1253 return EXIT_FAILURE;
1258 return EXIT_SUCCESS;
1262 css::uno::setCurrentContext(
new DesktopContext( css::uno::getCurrentContext() ) );
1264 if (officecfg::Office::Common::Misc::PreloadJVM::get() &&
pExecGlobals)
1266 SAL_INFO(
"desktop.app",
"Preload JVM");
1278#if !ENABLE_WASM_STRIP_SPLASH
1287 SAL_WARN(
"desktop.app",
"userinstall failed: " << inst_fin);
1295 return EXIT_FAILURE;
1301 Reference< XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
1303 Reference< XRestartManager > xRestartManager( OfficeRestartManager::get(
xContext) );
1311#if HAVE_FEATURE_DESKTOP && !defined(EMSCRIPTEN)
1315 bool bMustLockProfile = ( getenv(
"SAL_NOLOCK_PROFILE" ) == nullptr );
1316 if ( bMustLockProfile )
1324 return EXIT_FAILURE;
1332 return EXIT_FAILURE;
1338 return EXIT_SUCCESS;
1342 return EXIT_FAILURE;
1344#if HAVE_FEATURE_UPDATE_MAR
1345 const char* pUpdaterTestEnable = std::getenv(
"LIBO_UPDATER_TEST_ENABLE");
1346 if (pUpdaterTestEnable || officecfg::Office::Update::Update::Enabled::get())
1349 const char* pUpdaterRunning = std::getenv(
"LIBO_UPDATER_TEST_RUNNING");
1350 bool bUpdateRunning = officecfg::Office::Update::Update::UpdateRunning::get() || pUpdaterRunning;
1353 OUString aSeeAlso = officecfg::Office::Update::Update::SeeAlso::get();
1354 OUString aOldBuildID = officecfg::Office::Update::Update::OldBuildID::get();
1357 if (aOldBuildID == aBuildID)
1359 Updater::log(
"Old and new Build ID are the same. No Updating took place.");
1363 if (!aSeeAlso.isEmpty())
1365 SAL_INFO(
"desktop.updater",
"See also: " << aSeeAlso);
1366 Reference< css::system::XSystemShellExecute > xSystemShell(
1369 xSystemShell->execute( aSeeAlso, OUString(), SystemShellExecuteFlags::URIS_ONLY );
1375 std::shared_ptr< comphelper::ConfigurationChanges > batch(
1377 officecfg::Office::Update::Update::UpdateRunning::set(
false, batch);
1378 officecfg::Office::Update::Update::SeeAlso::set(OUString(), batch);
1379 officecfg::Office::Update::Update::OldBuildID::set(OUString(), batch);
1385 osl::DirectoryItem aUpdateFile;
1388 const char* pUpdaterTestUpdate = std::getenv(
"LIBO_UPDATER_TEST_UPDATE");
1389 const char* pForcedUpdateCheck = std::getenv(
"LIBO_UPDATER_TEST_UPDATE_CHECK");
1390 if (pUpdaterTestUpdate || aUpdateFile.is())
1392 OUString aBuildID(
"${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER
"/" SAL_CONFIGFILE(
"version")
":buildid}");
1393 rtl::Bootstrap::expandMacros(aBuildID);
1394 std::shared_ptr< comphelper::ConfigurationChanges > batch(
1396 officecfg::Office::Update::Update::OldBuildID::set(aBuildID, batch);
1397 officecfg::Office::Update::Update::UpdateRunning::set(
true, batch);
1401 css::uno::Reference<css::util::XFlushable> xFlushable(css::configuration::theDefaultProvider::get(
xContext), UNO_QUERY);
1402 xFlushable->flush();
1405 bool bSuccess =
update();
1407 return EXIT_SUCCESS;
1409 else if (isTimeForUpdateCheck() || pForcedUpdateCheck)
1412 Updater::log(
"Update Check Time: " + OUString::number(nNow));
1413 std::shared_ptr< comphelper::ConfigurationChanges > batch(
1415 officecfg::Office::Update::Update::LastUpdateTime::set(nNow, batch);
1439 pExecGlobals->xGlobalBroadcaster = Reference < css::document::XDocumentEventListener >
1440 ( css::frame::theGlobalEventBroadcaster::get(
xContext), UNO_SET_THROW );
1449#if HAVE_FEATURE_EXTENSIONS
1456 return EXIT_FAILURE;
1467 css::document::DocumentEvent
aEvent;
1468 aEvent.EventName =
"OnStartApp";
1474 bool bCrashed =
false;
1475 bool bExistsRecoveryData =
false;
1476 bool bExistsSessionData =
false;
1478 impl_checkRecoveryState(bCrashed, bExistsRecoveryData, bExistsSessionData);
1481 if ( !pidfileName.isEmpty() )
1483 OUString pidfileURL;
1485 if ( osl_getFileURLFromSystemPath(pidfileName.pData, &pidfileURL.pData) == osl_File_E_None )
1487 osl::File pidfile( pidfileURL );
1488 osl::FileBase::RC rc;
1490 osl::File::remove( pidfileURL );
1491 if ( (rc = pidfile.open( osl_File_OpenFlag_Write | osl_File_OpenFlag_Create ) ) == osl::File::E_None )
1493 OString pid( OString::number(
GETPID() ) );
1494 sal_uInt64 written = 0;
1495 if ( pidfile.write(pid.getStr(), pid.getLength(), written) != osl::File::E_None )
1497 SAL_WARN(
"desktop.app",
"cannot write pidfile " << pidfile.getURL());
1503 SAL_WARN(
"desktop.app",
"cannot open pidfile " << pidfile.getURL() << rc);
1508 SAL_WARN(
"desktop.app",
"cannot get pidfile URL from path" << pidfileName);
1517 pExecGlobals->bUseSystemFileDialog = officecfg::Office::Common::Misc::UseSystemFileDialog::get();
1518 std::shared_ptr< comphelper::ConfigurationChanges > xChanges(
1520 officecfg::Office::Common::Misc::UseSystemFileDialog::set(
false, xChanges );
1524 pExecGlobals->bRestartRequested = xRestartManager->isRestartRequested(
true);
1529 (!bExistsRecoveryData ) &&
1530 (!bExistsSessionData ) &&
1564 if ( xDesktop.is() )
1569#if HAVE_FEATURE_OPENCL
1574 const char * pDisplay = std::getenv(
"DISPLAY");
1575 if (!pDisplay || pDisplay[0] ==
':')
1577 runGraphicsRenderTests();
1589#if HAVE_FEATURE_JAVA
1592 css::uno::ContextLayer layer2(
1597 xRestartManager->isRestartRequested(
true);
1610 xDesktop->terminate();
1620 return EXIT_SUCCESS;
1633 isRestartRequested(
true);
1641 std::shared_ptr< comphelper::ConfigurationChanges > xChanges(
1643 officecfg::Office::Common::Misc::UseSystemFileDialog::set(
pExecGlobals->bUseSystemFileDialog, xChanges );
1648 if ( !pidfileName.isEmpty() )
1650 OUString pidfileURL;
1652 if ( osl_getFileURLFromSystemPath(pidfileName.pData, &pidfileURL.pData) == osl_File_E_None )
1654 if ( osl::File::remove( pidfileURL ) != osl::FileBase::E_None )
1656 SAL_WARN(
"desktop.app",
"shutdown: cannot remove pidfile " << pidfileURL);
1661 SAL_WARN(
"desktop.app",
"shutdown: cannot get pidfile URL from path" << pidfileName);
1676 RemoveIconCacheDirectory();
1698#if HAVE_FEATURE_SCRIPTING
1717#if !ENABLE_WASM_STRIP_SPLASH
1724 return EXIT_SUCCESS;
1736 css::configuration::theDefaultProvider::get(
1740 catch( css::lang::ServiceNotRegisteredException & e )
1745 catch(
const css::configuration::MissingBootstrapFileException& e )
1748 e.BootstrapFileURL ));
1751 catch(
const css::configuration::InvalidBootstrapFileException& e )
1754 e.BootstrapFileURL ));
1757 catch(
const css::configuration::InstallationIncompleteException& )
1759 OUString aVersionFileURL;
1769 catch (
const css::configuration::backend::BackendAccessException& exception)
1774 FatalError( MakeStartupErrorMessage( exception.Message ) );
1776 catch (
const css::configuration::backend::BackendSetupException& exception)
1781 FatalError( MakeStartupErrorMessage( exception.Message ) );
1783 catch (
const css::configuration::CannotLoadConfigurationException& )
1789 catch(
const css::uno::Exception& )
1800 css::uno::Reference< css::util::XFlushable >(
1801 css::configuration::theDefaultProvider::get(
1803 css::uno::UNO_QUERY_THROW)->flush();
1814 bool bQuickstart = shouldLaunchQuickstart();
1831 css::office::Quickstart::createStart(rxContext, bQuickstart);
1835 catch(
const css::uno::Exception& )
1853 switch ( nDragMode )
1855 case DragMode::FullWindow:
1856 nDragFullOptions |= DragFullOptions::All;
1858 case DragMode::Frame:
1861 case DragMode::SystemDep:
1867 hMouseSettings.
SetFollow( aAppearanceCfg.
IsMenuMouseFollow() ? (nFollow|MouseFollowFlags::Menu) : (nFollow&~MouseFollowFlags::Menu));
1870 bool bMenuIcons = officecfg::Office::Common::View::Menu::ShowIconsInMenues::get();
1871 bool bSystemMenuIcons = officecfg::Office::Common::View::Menu::IsSystemIconsInMenus::get();
1881class ExitTimer :
public Timer
1884 ExitTimer() :
Timer(
"desktop ExitTimer")
1889 virtual void Invoke()
override
1915 CloseSplashScreen();
1918 bool bDontShowDialogs
1923 bDontShowDialogs =
true;
1925 if (!bDontShowDialogs)
1929 xSMgr->createInstance(
"com.sun.star.bridge.OleApplicationRegistration");
1930 xSMgr->createInstance(
"com.sun.star.comp.ole.EmbedServer");
1932 const char *pExitPostStartup = getenv (
"OOO_EXIT_POST_STARTUP");
1933 if (pExitPostStartup && *pExitPostStartup)
1944 OUString aHelpModule;
1946 aHelpModule =
"swriter";
1948 aHelpModule =
"scalc";
1950 aHelpModule =
"sdraw";
1952 aHelpModule =
"simpress";
1954 aHelpModule =
"sdatabase";
1956 aHelpModule =
"sbasic";
1958 aHelpModule =
"smath";
1960 if (!aHelpModule.isEmpty()) {
1961 OUString aHelpURL =
"vnd.sun.star.help://"
1963 +
"/start?Language="
1966 aHelpURL +=
"&System=UNX";
1968 aHelpURL +=
"&System=WIN";
1991#if HAVE_FEATURE_BREAKPAD
1992 if (officecfg::Office::Common::Misc::CrashReport::get() && CrashReporter::crashReportInfoExists())
1993 handleCrashReport();
1996 if ( ! bAllowRecoveryAndSessionManagement )
2000 Reference< XDispatch > xRecovery = css::frame::theAutoRecovery::get( ::comphelper::getProcessComponentContext() );
2003 css::util::URL aCmd;
2004 aCmd.Complete =
"vnd.sun.star.autorecovery:/disableRecovery";
2005 xParser->parseStrict(aCmd);
2007 xRecovery->dispatch(aCmd, css::uno::Sequence< css::beans::PropertyValue >());
2009 catch(
const css::uno::Exception&)
2016 bool bExistsRecoveryData =
false;
2017#if !ENABLE_WASM_STRIP_RECOVERYUI
2018 bool bCrashed =
false;
2019 bool bExistsSessionData =
false;
2020 bool const bDisableRecovery
2021 = getenv(
"OOO_DISABLE_RECOVERY") !=
nullptr
2023 || !officecfg::Office::Recovery::RecoveryInfo::Enabled::get();
2025 impl_checkRecoveryState(bCrashed, bExistsRecoveryData, bExistsSessionData);
2027 if ( !bDisableRecovery &&
2029 bExistsRecoveryData ||
2036 impl_callRecoveryUI(
2038 bExistsRecoveryData);
2040 catch(
const css::uno::Exception&)
2047 Reference< XSessionManagerListener2 > xSessionListener;
2051 bool bUIOnSessionShutdownAllowed = officecfg::Office::Recovery::SessionShutdown::DocumentStoreUIEnabled::get();
2052 xSessionListener = SessionListener::createWithOnQuitFlag(
2053 ::comphelper::getProcessComponentContext(), bUIOnSessionShutdownAllowed);
2055 catch(
const css::uno::Exception&)
2060 if ( !bExistsRecoveryData && xSessionListener.is() )
2065 xSessionListener->doRestore();
2067 catch(
const css::uno::Exception&)
2127 VclMessageType::Warning, VclButtonsType::Ok,
2128 DpResId(STR_ERR_PRINTDISABLED)));
2142 Reference< XElementAccess > xList( xDesktop->getFrames(), UNO_QUERY_THROW );
2143 if ( xList->hasElements() )
2181 if (
aName.isEmpty() )
2211 const OUString& rName, std::optional< OUString >
const & cwdUrl )
2215 if (rName.startsWith(
"vnd.sun.star.script"))
2227 if ( rName.startsWith(
"service:"))
2247 RTL_TEXTENCODING_UTF8,
true );
2250 ::osl::FileStatus aStatus( osl_FileStatus_Mask_FileURL );
2251 ::osl::DirectoryItem aItem;
2252 if( ::osl::FileBase::E_None == ::osl::DirectoryItem::get( aFileURL, aItem ) &&
2253 ::osl::FileBase::E_None == aItem.getFileStatus( aStatus ) )
2254 aFileURL = aStatus.getFileURL();
2271 Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
2275 Reference< css::frame::XFrame > xTask = xDesktop->getActiveFrame();
2279 Reference< css::container::XIndexAccess > xList = xDesktop->getFrames();
2280 if ( xList->getCount() > 0 )
2281 xList->getByIndex(0) >>= xTask;
2286 Reference< css::awt::XTopWindow > xTop( xTask->getContainerWindow(), UNO_QUERY );
2292 Reference< css::awt::XWindow > xContainerWindow;
2293 Reference< XFrame > xBackingFrame = xDesktop->findFrame(
"_blank", 0);
2294 if (xBackingFrame.is())
2295 xContainerWindow = xBackingFrame->getContainerWindow();
2296 if (xContainerWindow.is())
2298 Reference< XController > xStartModule = StartModule::createWithParentWindow(
xContext, xContainerWindow);
2299 Reference< css::awt::XWindow > xBackingWin(xStartModule, UNO_QUERY);
2303 xBackingFrame->setComponent(xBackingWin, xStartModule);
2304 xStartModule->attachFrame(xBackingFrame);
2305 xContainerWindow->setVisible(
true);
2309 pCompWindow->PaintImmediately();
2322 docsRequest.
aOpenList.end(), data.begin(), data.end());
2339 docsRequest.
aPrintList.end(), data.begin(), data.end());
2347 OSL_ENSURE( pD,
"no desktop ?!?" );
2360 Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
2361 css::office::Quickstart::createStart(
xContext,
true);
2370 Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
2377 aCommand.Complete =
".uno:OptionsTreeDialog";
2384 css::uno::Reference< css::frame::XDispatch >
xDispatch = xDesktop->queryDispatch(
aCommand, OUString(), 0);
2386 xDispatch->dispatch(
aCommand, css::uno::Sequence< css::beans::PropertyValue >());
2389 catch(
const css::uno::Exception&)
2399 SAL_WARN(
"desktop.app",
"this cannot happen");
2404#if !ENABLE_WASM_STRIP_SPLASH
2423 aAppName =
"writer";
2424 else if ( rCmdLine.
IsCalc() )
2426 else if ( rCmdLine.
IsDraw() )
2429 aAppName =
"impress";
2430 else if ( rCmdLine.
IsBase() )
2433 aAppName =
"global";
2434 else if ( rCmdLine.
IsMath() )
2436 else if ( rCmdLine.
IsWeb() )
2440 OUString aSplashService(
"com.sun.star.office.SplashScreen" );
2442 aSplashService =
"com.sun.star.office.PipeSplashScreen";
2444 Sequence< Any >
aSeq{
Any(
true) ,
Any(aAppName) };
2445 css::uno::Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
2447 xContext->getServiceManager()->createInstanceWithArgumentsAndContext(aSplashService,
aSeq,
xContext),
2458#if ENABLE_WASM_STRIP_SPLASH
2470#if ENABLE_WASM_STRIP_SPLASH
2482#if !ENABLE_WASM_STRIP_SPLASH
2498 Reference< XJobExecutor > xExecutor = theJobExecutor::get( ::comphelper::getProcessComponentContext() );
2499 xExecutor->trigger(
"onFirstRunInitialization" );
2501 catch(
const css::uno::Exception&)
2503 TOOLS_WARN_EXCEPTION(
"desktop.app",
"Desktop::DoFirstRunInitializations: caught an exception while trigger job executor" );
2515 if (progress !=
nullptr)
2519 Reference< XFrame > xBackingFrame = xDesktop->findFrame(
"_blank", 0);
2520 Reference< css::awt::XWindow > xContainerWindow;
2522 if (xBackingFrame.is())
2523 xContainerWindow = xBackingFrame->getContainerWindow();
2524 if (!xContainerWindow.is())
2531 SAL_WARN_IF( !pContainerWindow,
"desktop.app",
"Desktop::Main: no implementation access to the frame's container window!" );
2532 pContainerWindow->SetExtendedStyle( pContainerWindow->GetExtendedStyle() | WindowExtendedStyle::Document );
2533 if (progress !=
nullptr)
2538 Reference< XController > xStartModule = StartModule::createWithParentWindow(
xContext, xContainerWindow);
2542 xBackingFrame->setComponent(Reference< XWindow >(xStartModule, UNO_QUERY), xStartModule);
2543 if (progress !=
nullptr)
2547 xStartModule->attachFrame(xBackingFrame);
2548 if (progress !=
nullptr)
2552 xContainerWindow->setVisible(
true);
2558 if (!officecfg::Office::Common::Misc::FirstRun::get())
2568 WCHAR szValue[8192];
2569 DWORD nValueSize =
sizeof(szValue);
2571 if (ERROR_SUCCESS == RegOpenKeyW(HKEY_LOCAL_MACHINE, o3tl::toW(sRootKey.getStr()), &hKey))
2573 if ( ERROR_SUCCESS == RegQueryValueExW( hKey, L
"RunQuickstartAtFirstStart",
nullptr,
nullptr,
reinterpret_cast<LPBYTE
>(szValue), &nValueSize ) )
2575 css::uno::Reference< css::uno::XComponentContext >
xContext = ::comphelper::getProcessComponentContext();
2576 css::office::Quickstart::createAutoStart(
xContext,
true,
true);
2577 RegCloseKey( hKey );
2582 std::shared_ptr< comphelper::ConfigurationChanges > batch(
2584 officecfg::Office::Common::Misc::FirstRun::set(
false, batch);
bool bUseSystemFileDialog
rtl::Reference< JVMloadThread > xJVMloadThread
std::unique_ptr< SvtCTLOptions > pCTLLanguageOptions
std::unique_ptr< SvtPathOptions > pPathOptions
Reference< css::document::XDocumentEventListener > xGlobalBroadcaster
SfxApplication * SfxGetpApp()
const MouseSettings & GetMouseSettings() const
const MiscSettings & GetMiscSettings() const
void SetMouseSettings(const MouseSettings &rSet)
const StyleSettings & GetStyleSettings() const
void SetStyleSettings(const StyleSettings &rSet)
OUString const & GetStringData() const
std::vector< OUString > const & GetStringsData() const
static sal_uInt16 GetCommandLineParamCount()
static bool IsOnSystemEventLoop()
static void SetDisplayName(const OUString &rDisplayName)
static OutputDevice * GetDefaultDevice()
static SystemWindowFlags GetSystemWindowMode()
static void Abort(const OUString &rErrorText)
static void SetSystemWindowMode(SystemWindowFlags nMode)
static void ShowNativeErrorBox(const OUString &sTitle, const OUString &sMessage)
static const AllSettings & GetSettings()
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
static void SetFilterHdl(const Link< ConvertData &, bool > &rLink)
static bool IsInExecute()
static bool IsEventTestingModeEnabled()
static bool IsSafeModeEnabled()
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage)
static bool AnyInput(VclInputFlags nType=VCL_INPUT_ANY)
static void EnableSafeMode()
static OUString GetCommandLineParam(sal_uInt16 nParam)
static bool IsHeadlessModeEnabled()
static void addKeyValue(SAL_UNUSED_PARAMETER const OUString &, SAL_UNUSED_PARAMETER const OUString &, SAL_UNUSED_PARAMETER tAddKeyHandling)
static GraphicFilter & GetGraphicFilter()
Link< ConvertData &, bool > GetFilterCallback() const
void run(bool storeResultBitmap=false)
virtual bool Start(const OUString &rHelpId, weld::Widget *pWidget=nullptr)
INetURLObject smartRel2Abs(OUString const &rTheRelURIRef, bool &rWasAbsolute, bool bIgnoreFragment=false, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8, bool bRelativeNonURIs=false, FSysStyle eStyle=FSysStyle::Detect) const
bool SetURL(std::u16string_view rTheAbsURIRef, EncodeMechanism eMechanism=EncodeMechanism::WasEncoded, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
bool GetDisablePrinting() const
bool GetEnableATToolSupport() const
void SetFollow(MouseFollowFlags nFollow)
MouseFollowFlags GetFollow() const
static void GetOptions(SfxItemSet &)
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
static void DetachAllDocBasicItems()
void SetContextMenuShortcuts(TriState eContextMenuShortcuts)
void SetUseImagesInMenus(TriState eUseImagesInMenus)
DragFullOptions GetDragFullOptions() const
void SetDragFullOptions(DragFullOptions nOptions)
bool IsModuleInstalled(EModule eModule) const
OUString GetFactoryEmptyDocumentURL(EFactory eFactory) const
const OUString & GetFactoryName(EFactory eFactory) const
DragMode GetDragMode() const
void SetApplicationDefaults(Application *pApp)
bool IsMenuMouseFollow() const
static void SetInitialized()
static bool IsInitialized()
void SetTimeout(sal_uInt64 nTimeoutMs)
void SetInvokeHandler(const Link< Timer *, void > &rLink)
virtual void Start(bool bStartTimer=true) override
static void removeUpdateFiles()
static void log(const OUString &rMessage)
static OUString getUpdateFileURL()
static OUString getBuildID()
static vcl::Window * GetWindow(const css::uno::Reference< css::awt::XWindow > &rxWindow)
static void reactOnSafeMode(bool bSafeMode)
void tryPushExtensionInfo()
static void setExitWasCalled()
static std::shared_ptr< ConfigurationChanges > create()
static ThreadPool & getSharedOptimalPool()
bool HasSplashPipe() const
std::vector< OUString > GetForceNewList() const
bool IsTerminateAfterInit() const
std::vector< OUString > GetConversionList() const
bool IsNoLockcheck() const
const OUString & GetPrinterName() const
OUString const & GetImageConversionType() const
OUString GetConversionOut() const
std::vector< OUString > GetViewList() const
std::vector< OUString > GetStartList() const
std::vector< OUString > GetPrintList() const
std::vector< OUString > GetForceOpenList() const
const OUString & GetUnknown() const
bool HasModuleParam() const
bool IsQuickstart() const
bool IsEventTesting() const
const std::optional< OUString > & getCwdUrl() const
std::vector< OUString > GetPrintToList() const
std::vector< OUString > GetOpenList() const
bool IsNoQuickstart() const
bool WantsToLoadDocument() const
bool IsHelpWriter() const
std::vector< OUString > const & GetInFilter() const
const OUString & GetPidfileName() const
bool IsHelpImpress() const
const OUString & GetConversionParams() const
static bool CheckExtensionDependencies()
static void RemoveTemporaryDirectory()
static void DeregisterServices()
static void destroyAcceptor(const OUString &aDescription)
static void CheckOpenCLCompute(const css::uno::Reference< css::frame::XDesktop2 > &)
BootstrapError m_aBootstrapError
static void FlushConfiguration()
static void InitApplicationServiceManager()
static bool InitializeQuickstartMode(const css::uno::Reference< css::uno::XComponentContext > &rxContext)
BootstrapStatus GetBootstrapStatus() const
virtual void InitFinished() override
virtual bool QueryExit() override
OUString m_aBootstrapErrorMessage
css::uno::Reference< css::task::XStatusIndicator > m_rSplashScreen
static void createAcceptor(const OUString &aDescription)
virtual void OverrideSystemSettings(AllSettings &rSettings) override
bool m_bCleanedExtensionCache
static void HandleAppEvent(const ApplicationEvent &rAppEvent)
@ BE_USERINSTALL_NOWRITEACCESS
@ BE_UNO_SERVICE_CONFIG_MISSING
@ BE_USERINSTALL_NOTENOUGHDISKSPACE
static void SynchronizeExtensionRepositories(bool bCleanedExtensionCache, Desktop *pDesktop=nullptr)
static void OpenDefault()
static void OpenClients()
virtual void AppEvent(const ApplicationEvent &rAppEvent) override
void CheckFirstRun()
checks if the office is run the first time
void SetBootstrapError(BootstrapError nError, OUString const &aMessage)
static CommandLineArgs & GetCommandLineArgs()
static void HandleBootstrapErrors(BootstrapError nError, OUString const &aMessage)
static OUString CreateErrorMsgString(utl::Bootstrap::FailureCode nFailureCode, const OUString &aFileURL)
virtual void Init() override
static bool InitializeConfiguration()
void SetSplashScreenText(const OUString &rText)
virtual void Exception(ExceptionCategory nCategory) override
virtual ~Desktop() override
std::thread m_aUpdateThread
static void ShowBackingComponent(Desktop *progress)
std::unique_ptr< Lockfile > m_xLockfile
void SetSplashScreenProgress(sal_Int32)
virtual void DeInit() override
virtual int Main() override
static void HandleBootstrapPathErrors(::utl::Bootstrap::Status, std::u16string_view aMsg)
virtual void Shutdown() override
void SetBootstrapStatus(BootstrapStatus nStatus)
static void migrateSettingsIfNecessary()
static void EnableRequests()
static Status Enable(bool ipc)
static void SetReady(bool bIsReady)
static bool ExecuteCmdLineRequests(ProcessDocumentsRequest &, bool noTerminate)
@ IPC_STATUS_BOOTSTRAP_ERROR
static bool removeRestartFlag()
static bool hasRestartFlag()
static PathStatus locateVersionFile(OUString &_rURL)
static PathStatus locateUserInstallation(OUString &_rURL)
static Status checkBootstrapStatus(OUString &_rDiagnosticMessage, FailureCode &_rErrCode)
static OUString getProductKey()
MISSING_VERSION_FILE_ENTRY
INVALID_BOOTSTRAP_FILE_ENTRY
static OUString getBuildIdData(OUString const &_sDefault)
static PathStatus locateBootstrapFile(OUString &_rURL)
static OUString getProductVersion()
static void storeConfigItems()
static OUString getUILocale()
static OUString getAboutBoxProductVersionSuffix()
static OUString getProductExtension()
static OUString getAboutBoxProductVersion()
static OUString getVendor()
static OUString getProductName()
#define SAL_CONFIGFILE(name)
#define TOOLS_WARN_EXCEPTION(area, stream)
Reference< XDispatch > xDispatch
OUString DpResId(TranslateId aId)
@ EXITHELPER_NORMAL_RESTART
@ EXITHELPER_CRASH_WITH_RESTART
Reference< XMultiServiceFactory > xSMgr
static uno::Reference< css::uno::XComponentContext > xContext
#define LINK(Instance, Class, Member)
Sequence< sal_Int8 > aSeq
#define SAL_WARN_IF(condition, area, stream)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
void SetReadStringHook(ResHookProc pProc)
Reference< XMultiServiceFactory > getProcessServiceFactory()
Reference< XComponentContext > getProcessComponentContext()
COMPHELPER_DLLPUBLIC bool isFileUrl(OUString const &url)
IMPL_LINK_NOARG(Desktop, OpenClients_Impl, void *, void)
OUString GetURL_Impl(const OUString &rName, std::optional< OUString > const &cwdUrl)
IMPL_STATIC_LINK_NOARG(Desktop, AsyncInitFirstRun, Timer *, void)
OUString ReplaceStringHookProc(const OUString &rStr)
bool Lockfile_execWarning(Lockfile const *that)
static ExecuteGlobals * pExecGlobals
static oslSignalHandler pSignalHandler
IMPL_STATIC_LINK(Desktop, ImplInitFilterHdl, ::ConvertData &, rData, bool)
oslSignalAction SalMainPipeExchangeSignal_impl(SAL_UNUSED_PARAMETER void *, oslSignalInfo *pInfo)
css::uno::Reference< css::deployment::XPackageRegistry > create(css::uno::Reference< css::deployment::XPackageRegistry > const &xRootRegistry, OUString const &context, OUString const &cachePath, css::uno::Reference< css::uno::XComponentContext > const &xComponentContext)
SFX2_DLLPUBLIC void removeTemporaryHtmlDirectory()
FWK_DLLPUBLIC const rtl::Reference< Desktop > & getDesktop(css::uno::Reference< css::uno::XComponentContext > const &context)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
UNOTOOLS_DLLPUBLIC bool Kill(OUString const &url)
static bool isProductVersionUpgraded(bool aUpdateVersion)
void removeTree(OUString const &url)
VCL_DLLPUBLIC void CheckFileExtRegistration(weld::Window *pDialogParent)
constexpr OUStringLiteral RID_APPTITLE
std::vector< OUString > aPrintToList
OUString aConversionParams
std::vector< OUString > aPrintList
std::vector< OUString > aConversionList
std::vector< OUString > aViewList
std::vector< OUString > aOpenList
OUString aImageConversionType
std::vector< OUString > aStartList
std::vector< OUString > aInFilter
std::vector< OUString > aForceNewList
std::vector< OUString > aForceOpenList
VCL_DLLPUBLIC Application * GetpApp()
VCL_DLLPUBLIC bool InitAccessBridge()
std::unique_ptr< char[]> aBuffer