sfx2/source/dialog/filedlghelper.cxx | 1 sfx2/source/doc/guisaveas.cxx | 73 ++++------------------------------- 2 files changed, 10 insertions(+), 64 deletions(-)
New commits: commit b51bf2b747533f540e9fbb746096d52cea182e1e Author: Samuel Mehrbrodt <samuel.mehrbr...@collabora.com> AuthorDate: Mon Sep 8 10:04:49 2025 +0200 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Mon Sep 8 17:59:31 2025 +0200 tdf#167897 Fix save/export directory preselection with empty user profile In the case of an empty user profile, the logic to display the correct directory was twisted. This also reverts the fix for tdf#165228 since the root cause now has been fixed. Change-Id: I0e33c53b7e1d8a7366caad0e1375a2f95a3ae313 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190655 Tested-by: Jenkins Reviewed-by: Samuel Mehrbrodt <samuel.mehrbr...@collabora.com> (cherry picked from commit 67ea1fc544a0651e8da78531cfa3525f72c434ef) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/190665 Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx index 677cea0e370f..8966dc7fec46 100644 --- a/sfx2/source/dialog/filedlghelper.cxx +++ b/sfx2/source/dialog/filedlghelper.cxx @@ -1455,7 +1455,6 @@ ErrCode FileDialogHelper_Impl::execute( css::uno::Sequence<OUString>& rpURLList, } rpURLList = {}; - maPath.clear(); // tdf#165228 This should not survive between calls to execute if ( ! mxFileDlg.is() ) return ERRCODE_ABORT; diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx index 3f171cfd8bb8..e4865e29a1df 100644 --- a/sfx2/source/doc/guisaveas.cxx +++ b/sfx2/source/doc/guisaveas.cxx @@ -347,7 +347,6 @@ public: bool ShowDocumentInfoDialog(); static OUString GetRecommendedExtension( const OUString& aTypeName ); - OUString GetRecommendedDir( const OUString& aSuggestedDir ); OUString GetRecommendedName( const OUString& aSuggestedName, const OUString& aTypeName ); }; @@ -963,9 +962,15 @@ bool ModelData_Impl::OutputFileDialog( sal_Int16 nStoreMode, if (SfxViewShell* pViewShell = SfxViewShell::Current()) { SfxObjectShell* pDocShell = pViewShell->GetObjectShell(); - if (sPreselectedDir.isEmpty() && pDocShell && !pDocShell->IsBasedOnTemplate()) - sPreselectedDir = GetDocProps().getUnpackedValueOrDefault("DocumentBaseURL", OUString()); + if (pDocShell && !pDocShell->IsBasedOnTemplate()) + { + if (sPreselectedDir.isEmpty()) + sPreselectedDir = GetDocProps().getUnpackedValueOrDefault("DocumentBaseURL", OUString()); + if (sPreselectedDir.isEmpty() && GetStorable()->hasLocation()) + sPreselectedDir = GetStorable()->getLocation(); + } } + INetURLObject aObj(sPreselectedDir); aObj.removeSegment(); // remove file name from URL sPreselectedDir = aObj.GetMainURL(INetURLObject::DecodeMechanism::NONE); @@ -1072,9 +1077,8 @@ bool ModelData_Impl::OutputFileDialog( sal_Int16 nStoreMode, } } - const OUString aRecommendedDir {GetRecommendedDir( aSuggestedDir )}; - if ( !aRecommendedDir.isEmpty() ) - pFileDlg->SetDisplayFolder( aRecommendedDir ); + if ( !aSuggestedDir.isEmpty() ) + pFileDlg->SetDisplayFolder( aSuggestedDir ); const OUString aRecommendedName {GetRecommendedName( aSuggestedName, aAdjustToType )}; if ( !aRecommendedName.isEmpty() ) pFileDlg->SetFileName( aRecommendedName ); @@ -1346,63 +1350,6 @@ OUString ModelData_Impl::GetRecommendedExtension( const OUString& aTypeName ) return OUString(); } - -OUString ModelData_Impl::GetRecommendedDir( const OUString& aSuggestedDir ) -{ - if ( ( !aSuggestedDir.isEmpty() || GetStorable()->hasLocation() ) - && !GetMediaDescr().getUnpackedValueOrDefault(u"RepairPackage"_ustr, false ) ) - { - INetURLObject aLocation; - if ( !aSuggestedDir.isEmpty() ) - aLocation = INetURLObject( aSuggestedDir ); - else - { - const OUString aOldURL = GetStorable()->getLocation(); - if ( !aOldURL.isEmpty() ) - { - INetURLObject aTmp( aOldURL ); - if ( aTmp.removeSegment() ) - aLocation = std::move(aTmp); - } - - if ( aLocation.HasError() ) - aLocation = INetURLObject(); - } - - OUString sLocationURL( aLocation.GetMainURL( INetURLObject::DecodeMechanism::NONE ) ); - bool bIsInTempPath( false ); - OUString sSysTempPath; - if( osl::FileBase::getTempDirURL( sSysTempPath ) == osl::FileBase::E_None ) - bIsInTempPath = !sSysTempPath.isEmpty() && sLocationURL.startsWith( sSysTempPath ); -#ifdef _WIN32 - if( !bIsInTempPath ) - { - PWSTR sPath; - HRESULT hRes = SHGetKnownFolderPath(FOLDERID_InternetCache, 0, nullptr, &sPath); - if( SUCCEEDED(hRes) ) - { - OUString sTempINetFiles; - if( osl::FileBase::getFileURLFromSystemPath(OUString(o3tl::toU(sPath)), sTempINetFiles) == osl::FileBase::E_None ) - bIsInTempPath = !sTempINetFiles.isEmpty() && sLocationURL.startsWith( sTempINetFiles ); - } - CoTaskMemFree(sPath); - } -#endif - // Suggest somewhere other than the system's temp directory - if( bIsInTempPath ) - aLocation = INetURLObject(); - - aLocation.setFinalSlash(); - if ( !aLocation.HasError() ) - return aLocation.GetMainURL( INetURLObject::DecodeMechanism::NONE ); - - return OUString(); - } - - return OUString(); -} - - OUString ModelData_Impl::GetRecommendedName( const OUString& aSuggestedName, const OUString& aTypeName ) { // the last used name might be provided by aSuggestedName from the old selection, or from the MediaDescriptor