summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2023-04-07 13:24:11 +0100
committerCaolán McNamara <caolanm@redhat.com>2023-04-07 16:54:45 +0200
commit9e786320a7d2609a9f997b32e31347f2eab0489e (patch)
tree5cce4899cb316735be546da843b29fb1fe6c6b33
parent105a9390e02856887ff5cfb6dbf6fe008738ffe1 (diff)
move using the vcl file dialog in headless mode to the point of creation
instead of setting and unsetting the config option at start and exit because a document that crashes in headless mode leaves my config in an unwanted built-in file dialog state. Change-Id: Ib5fcc5994a08c78bffdf57cb5b252dc469167ba2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150126 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--desktop/source/app/app.cxx23
-rw-r--r--postprocess/qa/services.cxx8
-rw-r--r--sfx2/source/appl/shutdownicon.cxx10
-rw-r--r--svtools/source/uno/fpicker.cxx11
4 files changed, 18 insertions, 34 deletions
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx
index 72674493a0fb..169330dab9f7 100644
--- a/desktop/source/app/app.cxx
+++ b/desktop/source/app/app.cxx
@@ -1227,14 +1227,12 @@ struct ExecuteGlobals
{
Reference < css::document::XDocumentEventListener > xGlobalBroadcaster;
bool bRestartRequested;
- bool bUseSystemFileDialog;
std::unique_ptr<SvtCTLOptions> pCTLLanguageOptions;
std::unique_ptr<SvtPathOptions> pPathOptions;
rtl::Reference< JVMloadThread > xJVMloadThread;
ExecuteGlobals()
: bRestartRequested( false )
- , bUseSystemFileDialog( true )
{}
};
@@ -1511,18 +1509,6 @@ int Desktop::Main()
}
}
- if ( rCmdLineArgs.IsHeadless() )
- {
- // Ensure that we use not the system file dialogs as
- // headless mode relies on Application::EnableHeadlessMode()
- // which does only work for VCL dialogs!!
- pExecGlobals->bUseSystemFileDialog = officecfg::Office::Common::Misc::UseSystemFileDialog::get();
- std::shared_ptr< comphelper::ConfigurationChanges > xChanges(
- comphelper::ConfigurationChanges::create());
- officecfg::Office::Common::Misc::UseSystemFileDialog::set( false, xChanges );
- xChanges->commit();
- }
-
pExecGlobals->bRestartRequested = xRestartManager->isRestartRequested(true);
if ( !pExecGlobals->bRestartRequested )
{
@@ -1635,16 +1621,7 @@ int Desktop::doShutdown()
if ( pExecGlobals->bRestartRequested )
SetRestartState();
- // Restore old value
const CommandLineArgs& rCmdLineArgs = GetCommandLineArgs();
- if ( rCmdLineArgs.IsHeadless() )
- {
- std::shared_ptr< comphelper::ConfigurationChanges > xChanges(
- comphelper::ConfigurationChanges::create());
- officecfg::Office::Common::Misc::UseSystemFileDialog::set( pExecGlobals->bUseSystemFileDialog, xChanges );
- xChanges->commit();
- }
-
OUString pidfileName = rCmdLineArgs.GetPidfileName();
if ( !pidfileName.isEmpty() )
{
diff --git a/postprocess/qa/services.cxx b/postprocess/qa/services.cxx
index 94bd76031ff4..c332402e390d 100644
--- a/postprocess/qa/services.cxx
+++ b/postprocess/qa/services.cxx
@@ -365,14 +365,10 @@ void Test::createInstance(
#endif
} else if (name == "com.sun.star.ui.dialogs.FolderPicker") {
// FolderPicker is a wrapper returning either a platform-specific or the
- // generic OfficeFolderPicker:
-#if defined(_WIN32)
- expImpl = "com.sun.star.ui.dialogs.Win32FolderPicker";
- expServs = {"com.sun.star.ui.dialogs.SystemFolderPicker"};
-#else
+ // generic OfficeFolderPicker. In headless mode it is always the
+ // generic one.
expImpl = "com.sun.star.svtools.OfficeFolderPicker";
expServs = {"com.sun.star.ui.dialogs.OfficeFolderPicker"};
-#endif
} else if (expImpl == "com.sun.star.comp.Calc.SpreadsheetDocument") {
expImpl = "ScModelObj";
} else if (expImpl == "com.sun.star.comp.Draw.DrawingDocument"
diff --git a/sfx2/source/appl/shutdownicon.cxx b/sfx2/source/appl/shutdownicon.cxx
index ae214842f61f..fca7e56b3f3f 100644
--- a/sfx2/source/appl/shutdownicon.cxx
+++ b/sfx2/source/appl/shutdownicon.cxx
@@ -138,11 +138,15 @@ void ShutdownIcon::deInitSystray()
m_bInitialized = false;
}
+static bool UseSystemFileDialog()
+{
+ return !Application::IsHeadlessModeEnabled() && officecfg::Office::Common::Misc::UseSystemFileDialog::get();
+}
ShutdownIcon::ShutdownIcon( css::uno::Reference< XComponentContext > xContext ) :
m_bVeto ( false ),
m_bListenForTermination ( false ),
- m_bSystemDialogs(officecfg::Office::Common::Misc::UseSystemFileDialog::get()),
+ m_bSystemDialogs(UseSystemFileDialog()),
m_xContext(std::move( xContext )),
m_bInitialized( false )
{
@@ -241,7 +245,7 @@ void ShutdownIcon::StartFileDialog()
{
::SolarMutexGuard aGuard;
- bool bDirty = ( m_bSystemDialogs != officecfg::Office::Common::Misc::UseSystemFileDialog::get() );
+ bool bDirty = m_bSystemDialogs != UseSystemFileDialog();
if ( m_pFileDlg && bDirty )
{
@@ -382,7 +386,7 @@ IMPL_LINK( ShutdownIcon, DialogClosedHdl_Impl, FileDialogHelper*, /*unused*/, vo
// This fix is dependent on the dialog settings. Destroying the dialog here will
// crash the non-native dialog implementation! Therefore make this dependent on
// the settings.
- if ( officecfg::Office::Common::Misc::UseSystemFileDialog::get() )
+ if (UseSystemFileDialog())
{
m_pFileDlg.reset();
}
diff --git a/svtools/source/uno/fpicker.cxx b/svtools/source/uno/fpicker.cxx
index dbb69d601462..e02d8abebb80 100644
--- a/svtools/source/uno/fpicker.cxx
+++ b/svtools/source/uno/fpicker.cxx
@@ -48,6 +48,13 @@ static OUString FilePicker_getSystemPickerServiceName()
#endif
}
+// Ensure that we use not the system file dialogs as headless mode relies on
+// Application::EnableHeadlessMode() which only works for VCL dialogs
+static bool UseSystemFileDialog()
+{
+ return !Application::IsHeadlessModeEnabled() && officecfg::Office::Common::Misc::UseSystemFileDialog::get();
+}
+
Reference< css::uno::XInterface > FilePicker_CreateInstance (
Reference< css::uno::XComponentContext > const & context)
{
@@ -57,7 +64,7 @@ Reference< css::uno::XInterface > FilePicker_CreateInstance (
return xResult;
Reference< css::lang::XMultiComponentFactory > xFactory (context->getServiceManager());
- if (xFactory.is() && officecfg::Office::Common::Misc::UseSystemFileDialog::get())
+ if (xFactory.is() && UseSystemFileDialog())
{
xResult.set( Application::createFilePicker( context ) );
@@ -125,7 +132,7 @@ Reference< css::uno::XInterface > FolderPicker_CreateInstance (
return xResult;
Reference< css::lang::XMultiComponentFactory > xFactory (context->getServiceManager());
- if (xFactory.is() && officecfg::Office::Common::Misc::UseSystemFileDialog::get())
+ if (xFactory.is() && UseSystemFileDialog())
{
xResult.set( Application::createFolderPicker( context ) );
if (!xResult.is())