desktop/source/app/app.cxx | 3 + include/sfx2/safemode.hxx | 52 ++++++++++++++++++++++++++++++ sfx2/Library_sfx.mk | 1 sfx2/source/appl/appserv.cxx | 2 + sfx2/source/safemode/safemode.cxx | 59 +++++++++++++++++++++++++++++++++++ svx/source/dialog/SafeModeDialog.cxx | 10 +++++ svx/source/dialog/SafeModeDialog.hxx | 2 + svx/source/dialog/crashreportdlg.cxx | 3 + 8 files changed, 129 insertions(+), 3 deletions(-)
New commits: commit 2811e4215abb998ebea65512d8dcd86697e3301e Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Date: Wed Oct 12 11:18:08 2016 +0200 Delete the safemode flag when closing the dialog Change-Id: I7131849cc417155b55425eba1494992f7d07fa0b diff --git a/svx/source/dialog/SafeModeDialog.cxx b/svx/source/dialog/SafeModeDialog.cxx index 0553436..549a62f 100644 --- a/svx/source/dialog/SafeModeDialog.cxx +++ b/svx/source/dialog/SafeModeDialog.cxx @@ -46,6 +46,14 @@ void SafeModeDialog::dispose() Dialog::dispose(); } +bool SafeModeDialog::Close() +{ + // Remove the safe mode flag before exiting this dialog + sfx2::SafeMode::removeFlag(); + + return Dialog::Close(); +} + IMPL_LINK(SafeModeDialog, BtnHdl, Button*, pBtn, void) { if (pBtn == mpBtnContinue.get()) @@ -60,7 +68,6 @@ IMPL_LINK(SafeModeDialog, BtnHdl, Button*, pBtn, void) { Close(); } - sfx2::SafeMode::removeFlag(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/dialog/SafeModeDialog.hxx b/svx/source/dialog/SafeModeDialog.hxx index ac71cf4..41acc1f 100644 --- a/svx/source/dialog/SafeModeDialog.hxx +++ b/svx/source/dialog/SafeModeDialog.hxx @@ -26,6 +26,8 @@ public: virtual void dispose() override; + virtual bool Close() override; + private: VclPtr<Button> mpBtnContinue; commit d69006657512a5d23b03c69d89b378f47fa5c521 Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Date: Wed Oct 12 10:43:55 2016 +0200 Fix writing the flag file Change-Id: Id2eef64b52ac0f7c48dc090ed3ce41f5cde6b775 diff --git a/sfx2/source/safemode/safemode.cxx b/sfx2/source/safemode/safemode.cxx index a5669d1..3e84f7e 100644 --- a/sfx2/source/safemode/safemode.cxx +++ b/sfx2/source/safemode/safemode.cxx @@ -45,11 +45,12 @@ bool SafeMode::removeFlag() OUString SafeMode::getFileName() { - OUString url("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/safemode"); + OUString url("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/"); rtl::Bootstrap::expandMacros(url); OUString aProfilePath; FileBase::getSystemPathFromFileURL(url, aProfilePath); + FileBase::getAbsoluteFileURL(url, "safemode", aProfilePath); return aProfilePath; } commit a1261b63f22b8d9d7b134137d1252b6b28dea35c Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Date: Wed Oct 12 10:42:47 2016 +0200 Safemode: Add doxygen documentation Change-Id: Ic5a7f5dfcefe66c961c9b71e9dbdfefeb9f06825 diff --git a/include/sfx2/safemode.hxx b/include/sfx2/safemode.hxx index 666d2d4..03f8590 100644 --- a/include/sfx2/safemode.hxx +++ b/include/sfx2/safemode.hxx @@ -19,9 +19,29 @@ namespace sfx2 { class SFX2_DLLPUBLIC SafeMode { public: + /** + * Write a flag file to the user profile indicating that the next launch should be in safe mode. + * + * @return Whether the file could be written successfully + */ static bool putFlag(); + + /** + * Check the existence of the safe mode flag file. + * + * @return Whether the flag file for the safe mode exists + */ static bool hasFlag(); + + /** + * Remove the flag file for the safe mode. + * + * @return Whether the flag file could be removed successfully + */ static bool removeFlag(); + +private: + /** Returns the path of the safe mode flag file.*/ static OUString getFileName(); }; commit b3b9ae6c6fd19b437a5414489a9f38fb310a2843 Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de> Date: Tue Oct 11 16:07:37 2016 +0200 safemode: Add flag to indicate safemode Change-Id: Ifdbb291715b033eaace159297eac5348530e9f36 diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index a9d10c3..69da758 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -101,6 +101,7 @@ #include <vcl/settings.hxx> #include <sfx2/sfx.hrc> #include <sfx2/app.hxx> +#include <sfx2/safemode.hxx> #include <svl/itemset.hxx> #include <svl/eitem.hxx> #include <basic/sbstar.hxx> @@ -2138,7 +2139,7 @@ void Desktop::OpenClients() bool bAllowRecoveryAndSessionManagement = ( !rArgs.IsNoRestore() ) && ( !rArgs.IsHeadless() ); // Enter safe mode if requested - if (rArgs.IsSafeMode()) + if (rArgs.IsSafeMode() || sfx2::SafeMode::hasFlag()) handleSafeMode(); diff --git a/include/sfx2/safemode.hxx b/include/sfx2/safemode.hxx new file mode 100644 index 0000000..666d2d4 --- /dev/null +++ b/include/sfx2/safemode.hxx @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_SFX2_SAFEMODE_HXX +#define INCLUDED_SFX2_SAFEMODE_HXX + +#include <sfx2/dllapi.h> + +#include <rtl/ustring.hxx> + +namespace sfx2 { + +class SFX2_DLLPUBLIC SafeMode +{ +public: + static bool putFlag(); + static bool hasFlag(); + static bool removeFlag(); + static OUString getFileName(); +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/Library_sfx.mk b/sfx2/Library_sfx.mk index 9ec5f0e..e3daa77 100644 --- a/sfx2/Library_sfx.mk +++ b/sfx2/Library_sfx.mk @@ -251,6 +251,7 @@ $(eval $(call gb_Library_add_exception_objects,sfx,\ sfx2/source/notify/globalevents \ sfx2/source/notify/hintpost \ sfx2/source/notify/openurlhint \ + sfx2/source/safemode/safemode \ sfx2/source/sidebar/Sidebar \ sfx2/source/sidebar/SidebarChildWindow \ sfx2/source/sidebar/SidebarDockingWindow \ diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx index b09613e..defd3b6 100644 --- a/sfx2/source/appl/appserv.cxx +++ b/sfx2/source/appl/appserv.cxx @@ -127,6 +127,7 @@ #include <sfx2/sidebar/Sidebar.hxx> #include <sfx2/notebookbar/SfxNotebookBar.hxx> #include <sfx2/sidebar/SidebarController.hxx> +#include <sfx2/safemode.hxx> #include <comphelper/types.hxx> #include <officecfg/Office/Common.hxx> @@ -311,6 +312,7 @@ namespace IMPL_LINK_NOARG(SafeModeQueryDialog, RestartHdl, Button*, void) { EndDialog(RET_OK); + sfx2::SafeMode::putFlag(); uno::Reference< uno::XComponentContext > xContext = comphelper::getProcessComponentContext(); css::task::OfficeRestartManager::get(xContext)->requestRestart( css::uno::Reference< css::task::XInteractionHandler >()); diff --git a/sfx2/source/safemode/safemode.cxx b/sfx2/source/safemode/safemode.cxx new file mode 100644 index 0000000..a5669d1 --- /dev/null +++ b/sfx2/source/safemode/safemode.cxx @@ -0,0 +1,58 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <sfx2/safemode.hxx> + +#include <config_folders.h> + +#include <osl/file.hxx> +#include <rtl/bootstrap.hxx> + +using namespace osl; + +namespace sfx2 { + +bool SafeMode::putFlag() +{ + File safeModeFile(getFileName()); + if (safeModeFile.open(osl_File_OpenFlag_Create) == FileBase::E_None) + { + safeModeFile.close(); + return true; + } + return false; +} +bool SafeMode::hasFlag() +{ + File safeModeFile(getFileName()); + if (safeModeFile.open(osl_File_OpenFlag_Read) == FileBase::E_None) + { + safeModeFile.close(); + return true; + } + return false; +} +bool SafeMode::removeFlag() +{ + return File::remove(getFileName()) == FileBase::E_None; +} + +OUString SafeMode::getFileName() +{ + OUString url("${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE("bootstrap") ":UserInstallation}/safemode"); + rtl::Bootstrap::expandMacros(url); + + OUString aProfilePath; + FileBase::getSystemPathFromFileURL(url, aProfilePath); + return aProfilePath; +} + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/dialog/SafeModeDialog.cxx b/svx/source/dialog/SafeModeDialog.cxx index c9f6e4c..0553436 100644 --- a/svx/source/dialog/SafeModeDialog.cxx +++ b/svx/source/dialog/SafeModeDialog.cxx @@ -10,9 +10,9 @@ #include "SafeModeDialog.hxx" #include <config_folders.h> - #include <rtl/bootstrap.hxx> #include <osl/file.hxx> +#include <sfx2/safemode.hxx> SafeModeDialog::SafeModeDialog(vcl::Window* pParent): Dialog(pParent, "SafeModeDialog", "svx/ui/safemodedialog.ui") @@ -60,6 +60,7 @@ IMPL_LINK(SafeModeDialog, BtnHdl, Button*, pBtn, void) { Close(); } + sfx2::SafeMode::removeFlag(); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svx/source/dialog/crashreportdlg.cxx b/svx/source/dialog/crashreportdlg.cxx index bbac211..1692a44 100644 --- a/svx/source/dialog/crashreportdlg.cxx +++ b/svx/source/dialog/crashreportdlg.cxx @@ -15,6 +15,7 @@ #include <rtl/bootstrap.hxx> #include <desktop/crashreport.hxx> #include <desktop/minidump.hxx> +#include <sfx2/safemode.hxx> #include <comphelper/processfactory.hxx> #include <osl/file.hxx> @@ -104,7 +105,7 @@ IMPL_LINK(CrashReportDialog, BtnHdl, Button*, pBtn, void) // Check whether to go to safe mode if (mpCBSafeMode->IsChecked()) { - //TODO: Actually set the safe mode, currently it's only restarting + sfx2::SafeMode::putFlag(); css::uno::Reference< css::uno::XComponentContext > xContext = comphelper::getProcessComponentContext(); css::task::OfficeRestartManager::get(xContext)->requestRestart( css::uno::Reference< css::task::XInteractionHandler >()); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits