summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2017-07-31 15:40:21 +0200
committerAndras Timar <andras.timar@collabora.com>2017-07-31 20:24:07 +0200
commitf0400ead0a1d02c3f714b7df243158cd26489dbe (patch)
tree3a64e2cd4e8e06830b1e009a67019d9b2b62eb9f
parenta42fac9b2d812a2df8c75d35d837cd8bdd6a7849 (diff)
tdf#109537: treat Temporary Internet Files as temp directory
... on Windows. Also, when testing against ordinary temp directory, use system path, not LibreOffice temp directory (thanks to Aron Budea). Change-Id: I52ecddc65097d6d64ec45e882cce8f1e7006794d Reviewed-on: https://gerrit.libreoffice.org/40594 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> (cherry picked from commit 22334f8a003d26c71d772a8e00fc80b7e6d2bef1) Reviewed-on: https://gerrit.libreoffice.org/40601 Reviewed-by: Andras Timar <andras.timar@collabora.com> Tested-by: Andras Timar <andras.timar@collabora.com>
-rw-r--r--sfx2/source/doc/guisaveas.cxx29
1 files changed, 28 insertions, 1 deletions
diff --git a/sfx2/source/doc/guisaveas.cxx b/sfx2/source/doc/guisaveas.cxx
index 50a554530260..7f8542248cc9 100644
--- a/sfx2/source/doc/guisaveas.cxx
+++ b/sfx2/source/doc/guisaveas.cxx
@@ -97,6 +97,15 @@
#include <com/sun/star/system/SystemShellExecute.hpp>
#include <com/sun/star/system/SystemShellExecuteFlags.hpp>
+#include <osl/file.hxx>
+
+#ifdef _WIN32
+#include <Shlobj.h>
+#ifdef GetTempPath
+#undef GetTempPath
+#endif
+#endif
+
// flags that specify requested operation
#define EXPORT_REQUESTED 1
#define PDFEXPORT_REQUESTED 2
@@ -1201,8 +1210,26 @@ OUString ModelData_Impl::GetRecommendedDir( const OUString& aSuggestedDir )
aLocation = INetURLObject( SvtPathOptions().GetWorkPath() );
}
+ 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 )
+ {
+ wchar_t sPath[MAX_PATH+1];
+ HRESULT hRes = SHGetFolderPathW( NULL, CSIDL_INTERNET_CACHE, NULL, SHGFP_TYPE_CURRENT, sPath );
+ if( SUCCEEDED(hRes) )
+ {
+ OUString sTempINetFiles;
+ if( osl::FileBase::getFileURLFromSystemPath(reinterpret_cast<sal_Unicode*>(sPath), sTempINetFiles) == osl::FileBase::E_None )
+ bIsInTempPath = !sTempINetFiles.isEmpty() && sLocationURL.startsWith( sTempINetFiles );
+ }
+ }
+#endif
// Suggest somewhere other than the system's temp directory
- if( aLocation.GetMainURL( INetURLObject::DecodeMechanism::NONE ).startsWith( SvtPathOptions().GetTempPath() ) )
+ if( bIsInTempPath )
aLocation = INetURLObject( SvtPathOptions().GetWorkPath() );
aLocation.setFinalSlash();