[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - cui/source fpicker/source officecfg/registry
Jan-Marek Glogowski (via logerrit)
logerrit at kemper.freedesktop.org
Wed Nov 27 20:54:06 UTC 2019
cui/source/options/optpath.cxx | 8 ---
fpicker/source/win32/IVistaFilePickerInternalNotify.hxx | 2
fpicker/source/win32/VistaFilePicker.cxx | 13 ------
fpicker/source/win32/VistaFilePickerEventHandler.cxx | 1
fpicker/source/win32/VistaFilePickerImpl.cxx | 28 ++++++-------
fpicker/source/win32/VistaFilePickerImpl.hxx | 4 -
officecfg/registry/schema/org/openoffice/Office/Common.xcs | 12 -----
7 files changed, 20 insertions(+), 48 deletions(-)
New commits:
commit a20e061d0a54e027a9cf3702fdc88b94e9ec8c18
Author: Jan-Marek Glogowski <jan-marek.glogowski at extern.cib.de>
AuthorDate: Thu Nov 21 17:16:28 2019 +0100
Commit: Jan-Marek Glogowski <glogow at fbihome.de>
CommitDate: Wed Nov 27 21:51:31 2019 +0100
tdf#43021 WIN opt-out of OS recent folder usage
The Microsoft documentation for SetFolder explicitly mentiones
"In general, we do not recommended the use of this method. [...]
SetDefaultFolder is the better method." If SetDefaultFolder is
used the recently-used folder overwrites the value passed to
SetDefaultFolder, which is shared between all file pickers.
With this patch we rely on the LO internal mechanism to show the
last used directory in the file picker.
Regina's workaround basically does the same, as it just sets
oRegistryKeyContent.WorkPathChanged, which triggers the internal
path to use SetFolder instead of SetDefaultFolder.
If you're wondering about the GetFolder() handling, the MS API
docs have this: "Gets either the folder currently selected in the
dialog, or, if the dialog is not currently displayed, the folder
that is to be selected when the dialog is opened."
So the call to GetFolder(), after the dialog is closed, returns
the folder set by the SetFolder call, not the folder selected by
the user, in case of the save dialog at least.
Change-Id: Ia24f47848501df82727bfb2a99db723468bfe5b1
Reviewed-on: https://gerrit.libreoffice.org/83409
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
Reviewed-by: Jan-Marek Glogowski <glogow at fbihome.de>
Tested-by: Jan-Marek Glogowski <glogow at fbihome.de>
(cherry picked from commit ffa636ba74b04b3258ec9a696bc4eac33581fa24)
Reviewed-on: https://gerrit.libreoffice.org/83839
Tested-by: Jenkins
diff --git a/cui/source/options/optpath.cxx b/cui/source/options/optpath.cxx
index b287852f2329..629b22ec98d3 100644
--- a/cui/source/options/optpath.cxx
+++ b/cui/source/options/optpath.cxx
@@ -445,14 +445,6 @@ void SvxPathTabPage::ChangeCurrentEntry( const OUString& _rFolder )
// Reset also last used dir in the sfx application instance
SfxApplication *pSfxApp = SfxGetpApp();
pSfxApp->ResetLastDir();
-
- // Set configuration flag to notify file picker that it's necessary
- // to take over the path provided.
- std::shared_ptr< comphelper::ConfigurationChanges > batch(
- comphelper::ConfigurationChanges::create());
- officecfg::Office::Common::Path::Info::WorkPathChanged::set(
- true, batch);
- batch->commit();
}
}
}
diff --git a/fpicker/source/win32/IVistaFilePickerInternalNotify.hxx b/fpicker/source/win32/IVistaFilePickerInternalNotify.hxx
index 3501a37c94f9..57f995715719 100644
--- a/fpicker/source/win32/IVistaFilePickerInternalNotify.hxx
+++ b/fpicker/source/win32/IVistaFilePickerInternalNotify.hxx
@@ -46,6 +46,8 @@ class IVistaFilePickerInternalNotify
virtual bool onFileTypeChanged( UINT nTypeIndex ) = 0;
+ virtual void onDirectoryChanged() = 0;
+
protected:
~IVistaFilePickerInternalNotify() {}
};
diff --git a/fpicker/source/win32/VistaFilePicker.cxx b/fpicker/source/win32/VistaFilePicker.cxx
index a7ded90f6d60..34b983c7ae51 100644
--- a/fpicker/source/win32/VistaFilePicker.cxx
+++ b/fpicker/source/win32/VistaFilePicker.cxx
@@ -169,22 +169,9 @@ void SAL_CALL VistaFilePicker::setDisplayDirectory(const OUString& sDirectory)
{
ensureInit();
- bool bChanged = officecfg::Office::Common::Path::Info::WorkPathChanged::get(
- comphelper::getComponentContext(m_xSMGR));
- if (bChanged )
- {
- std::shared_ptr< comphelper::ConfigurationChanges > batch(
- comphelper::ConfigurationChanges::create(
- comphelper::getComponentContext(m_xSMGR)));
- officecfg::Office::Common::Path::Info::WorkPathChanged::set(
- false, batch);
- batch->commit();
- }
-
RequestRef rRequest(new Request());
rRequest->setRequest (VistaFilePickerImpl::E_SET_DIRECTORY);
rRequest->setArgument(PROP_DIRECTORY, sDirectory);
- rRequest->setArgument(PROP_FORCE, bChanged);
m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
}
diff --git a/fpicker/source/win32/VistaFilePickerEventHandler.cxx b/fpicker/source/win32/VistaFilePickerEventHandler.cxx
index e770bef25406..b9ac5a3d28b8 100644
--- a/fpicker/source/win32/VistaFilePickerEventHandler.cxx
+++ b/fpicker/source/win32/VistaFilePickerEventHandler.cxx
@@ -111,6 +111,7 @@ STDMETHODIMP VistaFilePickerEventHandler::OnFolderChanging(IFileDialog* /*pDialo
STDMETHODIMP VistaFilePickerEventHandler::OnFolderChange(IFileDialog* /*pDialog*/)
{
impl_sendEvent(E_DIRECTORY_CHANGED, 0);
+ m_pInternalNotify->onDirectoryChanged();
return S_OK;
}
diff --git a/fpicker/source/win32/VistaFilePickerImpl.cxx b/fpicker/source/win32/VistaFilePickerImpl.cxx
index 1899f6addfc9..3c3286fe2f14 100644
--- a/fpicker/source/win32/VistaFilePickerImpl.cxx
+++ b/fpicker/source/win32/VistaFilePickerImpl.cxx
@@ -756,7 +756,6 @@ void VistaFilePickerImpl::impl_sta_SetFileName(const RequestRef& rRequest)
void VistaFilePickerImpl::impl_sta_SetDirectory(const RequestRef& rRequest)
{
OUString sDirectory = rRequest->getArgumentOrDefault(PROP_DIRECTORY, OUString());
- bool bForce = rRequest->getArgumentOrDefault(PROP_FORCE, false);
if( !m_bInExecute)
{
@@ -778,27 +777,25 @@ void VistaFilePickerImpl::impl_sta_SetDirectory(const RequestRef& rRequest)
if ( !createFolderItem(sDirectory, pFolder) )
return;
- if ( m_bInExecute || bForce )
- iDialog->SetFolder(pFolder);
- else
- {
- // Use set default folder as Microsoft recommends in the IFileDialog documentation.
- iDialog->SetDefaultFolder(pFolder);
- }
+ iDialog->SetFolder(pFolder);
}
-void VistaFilePickerImpl::impl_sta_GetDirectory(const RequestRef& rRequest)
+OUString VistaFilePickerImpl::GetDirectory()
{
TFileDialog iDialog = impl_getBaseDialogInterface();
ComPtr< IShellItem > pFolder;
HRESULT hResult = iDialog->GetFolder( &pFolder );
if ( FAILED(hResult) )
- return;
- OUString sFolder = lcl_getURLFromShellItem ( pFolder );
- if( sFolder.getLength())
- rRequest->setArgument( PROP_DIRECTORY, sFolder );
+ return OUString();
+ return lcl_getURLFromShellItem(pFolder);
}
+void VistaFilePickerImpl::impl_sta_GetDirectory(const RequestRef& rRequest)
+{
+ const OUString sFolder = m_sDirectory.isEmpty() ? GetDirectory() : m_sDirectory;
+ if (!sFolder.isEmpty())
+ rRequest->setArgument(PROP_DIRECTORY, sFolder);
+}
void VistaFilePickerImpl::impl_sta_SetDefaultName(const RequestRef& rRequest)
{
@@ -1324,6 +1321,11 @@ bool VistaFilePickerImpl::onFileTypeChanged( UINT /*nTypeIndex*/ )
return true;
}
+void VistaFilePickerImpl::onDirectoryChanged()
+{
+ m_sDirectory = GetDirectory();
+}
+
} // namespace vista
} // namespace win32
} // namespace fpicker
diff --git a/fpicker/source/win32/VistaFilePickerImpl.hxx b/fpicker/source/win32/VistaFilePickerImpl.hxx
index 9cce75b5714f..e5d2d88e4391 100644
--- a/fpicker/source/win32/VistaFilePickerImpl.hxx
+++ b/fpicker/source/win32/VistaFilePickerImpl.hxx
@@ -71,7 +71,6 @@ static const OUString PROP_FEATURES("features" ); // [sal_Int32]
static const OUString PROP_TEMPLATE_DESCR("templatedescription"); // [sal_Int32]
static const OUString PROP_FILTER_TITLE("filter_title" ); // [OUString]
static const OUString PROP_FILTER_VALUE("filter_value" ); // [OUString]
-static const OUString PROP_FORCE("force" ); // [sal_Bool]
static const OUString PROP_FILTER_GROUP("filter-group" ); // [seq< css:beans::StringPair >] contains a group of filters
static const OUString PROP_CONTROL_ID("control_id" ); // [sal_Int16]
@@ -147,9 +146,10 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
virtual void onAutoExtensionChanged (bool bChecked) override;
virtual bool onFileTypeChanged( UINT nTypeIndex ) override;
+ virtual void onDirectoryChanged() override;
private:
-
+ OUString GetDirectory();
/// implementation of request E_ADD_FILEPICKER_LISTENER
void impl_sta_addFilePickerListener(const RequestRef& rRequest);
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index d3056a325eba..cebb7d7ec0ef 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -1560,18 +1560,6 @@
<desc>Contains the current and default path settings used by the
Office.</desc>
</info>
- <group oor:name="Info">
- <info>
- <desc>Contains various properties information purpose only.</desc>
- </info>
- <prop oor:name="WorkPathChanged" oor:type="xs:boolean" oor:nillable="false">
- <info>
- <desc>A flag which is set by the tools options dialog whenever a
- user changed the work path.</desc>
- </info>
- <value>true</value>
- </prop>
- </group>
<group oor:name="Current">
<info>
<desc>Contains the global path settings, mainly those of the Options
More information about the Libreoffice-commits
mailing list