summaryrefslogtreecommitdiff
path: root/fpicker
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2023-04-22 16:12:23 +0200
committerMike Kaganski <mike.kaganski@collabora.com>2023-04-22 17:45:50 +0200
commitdf4255c315f8061fbe7b3771122926589be7dfad (patch)
treedf777155f7203e198ed68cfce407f62283fca93d /fpicker
parent8de1bf3674b5f5391ff1be229d99115107514877 (diff)
Simplify lcl_getURLFromShellItem
And make the URL returned for the item by system to be the preferred result. Change-Id: Ifbe8acc0aef8d656526d1ae64010fb6bfa68eefc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150784 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Diffstat (limited to 'fpicker')
-rw-r--r--fpicker/source/win32/VistaFilePickerImpl.cxx54
1 files changed, 16 insertions, 38 deletions
diff --git a/fpicker/source/win32/VistaFilePickerImpl.cxx b/fpicker/source/win32/VistaFilePickerImpl.cxx
index 741fdadb621a..fa58efc6c5d9 100644
--- a/fpicker/source/win32/VistaFilePickerImpl.cxx
+++ b/fpicker/source/win32/VistaFilePickerImpl.cxx
@@ -169,55 +169,33 @@ using TFolderPickerDialogImpl = TDialogImpl<TFileOpenDialog, CLSID_FileOpenDialo
static OUString lcl_getURLFromShellItem (IShellItem* pItem)
{
- LPWSTR pStr = nullptr;
- OUString sURL;
- HRESULT hr;
-
- hr = pItem->GetDisplayName ( SIGDN_FILESYSPATH, &pStr );
- if (SUCCEEDED(hr))
- {
- ::osl::FileBase::getFileURLFromSystemPath( OUString(o3tl::toU(pStr)), sURL );
- goto cleanup;
- }
-
- hr = pItem->GetDisplayName ( SIGDN_URL, &pStr );
- if (SUCCEEDED(hr))
- {
- sURL = o3tl::toU(pStr);
- goto cleanup;
- }
+ sal::systools::CoTaskMemAllocated<wchar_t> pStr;
+ if (SUCCEEDED(pItem->GetDisplayName(SIGDN_URL, &pStr)))
+ return OUString(o3tl::toU(pStr));
- hr = pItem->GetDisplayName ( SIGDN_PARENTRELATIVEPARSING, &pStr );
- if (SUCCEEDED(hr))
+ HRESULT hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pStr);
+ if (FAILED(hr))
{
- GUID known_folder_id;
- std::wstring aStr = pStr;
- CoTaskMemFree (pStr);
-
- if (0 == aStr.compare(0, 3, L"::{"))
- aStr = aStr.substr(2);
- hr = IIDFromString(aStr.c_str(), &known_folder_id);
+ hr = pItem->GetDisplayName(SIGDN_PARENTRELATIVEPARSING, &pStr);
if (SUCCEEDED(hr))
{
- hr = SHGetKnownFolderPath(known_folder_id, 0, nullptr, &pStr);
+ GUID known_folder_id;
+ wchar_t* pStr2 = pStr;
+ if (pStr2[0] == ':' && pStr2[1] == ':' && pStr2[2] == '{')
+ pStr2 += 2;
+ hr = IIDFromString(pStr2, &known_folder_id);
if (SUCCEEDED(hr))
- {
- ::osl::FileBase::getFileURLFromSystemPath(OUString(o3tl::toU(pStr)), sURL);
- goto cleanup;
- }
+ hr = SHGetKnownFolderPath(known_folder_id, 0, nullptr, &pStr);
}
}
// Default fallback
- hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, nullptr, &pStr);
+ if (FAILED(hr))
+ hr = SHGetKnownFolderPath(FOLDERID_Documents, 0, nullptr, &pStr);
+
+ OUString sURL;
if (SUCCEEDED(hr))
::osl::FileBase::getFileURLFromSystemPath(OUString(o3tl::toU(pStr)), sURL);
- else // shouldn't happen...
- goto bailout;
-
-cleanup:
- CoTaskMemFree (pStr);
-bailout:
return sURL;
}