mirror of
https://github.com/reactos/reactos.git
synced 2025-06-10 12:24:48 +00:00
[SHELL32] SHBrowseForFolderW: Fix creating directories in the desktop and in drives like C: CORE-13925
This commit is contained in:
parent
8e850d19bc
commit
78b78d6e73
1 changed files with 33 additions and 16 deletions
|
@ -748,6 +748,38 @@ static HRESULT BrsFolder_NewFolder(browse_info *info)
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
|
#ifdef __REACTOS__
|
||||||
|
hr = SHGetDesktopFolder(&desktop);
|
||||||
|
if(FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (info->pidlRet)
|
||||||
|
{
|
||||||
|
hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, &IID_IShellFolder, (void**)&cur);
|
||||||
|
IShellFolder_Release(desktop);
|
||||||
|
if(FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
hr = SHGetPathFromIDListW(info->pidlRet, path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cur = desktop;
|
||||||
|
hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY, NULL, SHGFP_TYPE_CURRENT, path);
|
||||||
|
}
|
||||||
|
if(FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder)))
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder))
|
||||||
|
return E_FAIL;
|
||||||
|
|
||||||
|
len = strlenW(path);
|
||||||
|
if(len<MAX_PATH && name[len] == L'\\')
|
||||||
|
len++;
|
||||||
|
#else
|
||||||
if(!info->pidlRet) {
|
if(!info->pidlRet) {
|
||||||
ERR("Make new folder button should be disabled\n");
|
ERR("Make new folder button should be disabled\n");
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
|
@ -757,27 +789,12 @@ static HRESULT BrsFolder_NewFolder(browse_info *info)
|
||||||
hr = SHGetDesktopFolder(&desktop);
|
hr = SHGetDesktopFolder(&desktop);
|
||||||
if(FAILED(hr))
|
if(FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, &IID_IShellFolder, (void**)&cur);
|
hr = IShellFolder_BindToObject(desktop, info->pidlRet, 0, &IID_IShellFolder, (void**)&cur);
|
||||||
IShellFolder_Release(desktop);
|
IShellFolder_Release(desktop);
|
||||||
if(FAILED(hr))
|
if(FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
#ifdef __REACTOS__
|
|
||||||
hr = SHGetPathFromIDListW(info->pidlRet, path);
|
|
||||||
if(FAILED(hr))
|
|
||||||
return hr;
|
|
||||||
|
|
||||||
len = strlenW(path);
|
|
||||||
if(len<MAX_PATH)
|
|
||||||
len++;
|
|
||||||
|
|
||||||
if (!LoadStringW(shell32_hInstance, IDS_NEWFOLDER, wszNewFolder, _countof(wszNewFolder)))
|
|
||||||
return E_FAIL;
|
|
||||||
|
|
||||||
if (!PathYetAnotherMakeUniqueName(name, path, NULL, wszNewFolder))
|
|
||||||
return E_FAIL;
|
|
||||||
#else
|
|
||||||
|
|
||||||
hr = IShellFolder_QueryInterface(cur, &IID_ISFHelper, (void**)&sfhelper);
|
hr = IShellFolder_QueryInterface(cur, &IID_ISFHelper, (void**)&sfhelper);
|
||||||
if(FAILED(hr))
|
if(FAILED(hr))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue