diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2023-04-22 16:12:23 +0200 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2023-04-22 17:45:50 +0200 |
commit | df4255c315f8061fbe7b3771122926589be7dfad (patch) | |
tree | df777155f7203e198ed68cfce407f62283fca93d /fpicker | |
parent | 8de1bf3674b5f5391ff1be229d99115107514877 (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.cxx | 54 |
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; } |