[SHELL32] SetNameOf should not append old extension to folders (#6954)

This commit is contained in:
Whindmar Saksit 2024-06-08 18:45:23 +02:00 committed by GitHub
parent 3f6af8b848
commit ecb5cae48f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 27 deletions

View file

@ -270,9 +270,12 @@ HRESULT WINAPI CNetworkConnections::SetNameOf (
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return hr; return hr;
*pPidlOut = ILCreateNetConnectItem(pCon); if (pPidlOut)
if (*pPidlOut == NULL) {
return E_FAIL; *pPidlOut = ILCreateNetConnectItem(pCon);
if (*pPidlOut == NULL)
return E_FAIL;
}
return S_OK; return S_OK;
} }

View file

@ -1499,7 +1499,7 @@ HRESULT WINAPI CFSFolder::SetNameOf(
} }
/* build source path */ /* build source path */
PathCombineW(szSrc, m_sPathTarget, pDataW->wszName); PathCombineW(szSrc, m_sPathTarget, pDataW->wszName); // FIXME: PIDLs without wide string
/* build destination path */ /* build destination path */
if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER) if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER)
@ -1507,39 +1507,33 @@ HRESULT WINAPI CFSFolder::SetNameOf(
else else
lstrcpynW(szDest, lpName, MAX_PATH); lstrcpynW(szDest, lpName, MAX_PATH);
if(!(dwFlags & SHGDN_FORPARSING) && SHELL_FS_HideExtension(szSrc)) { if (!(dwFlags & SHGDN_FORPARSING) && !bIsFolder && SHELL_FS_HideExtension(szSrc))
WCHAR *ext = PathFindExtensionW(szSrc); {
if(*ext != '\0') { LPCWSTR ext = PathFindExtensionW(szSrc);
INT len = wcslen(szDest); if (*ext)
lstrcpynW(szDest + len, ext, MAX_PATH - len); PathAddExtensionW(szDest, ext);
}
} }
HRESULT hr = S_OK;
TRACE ("src=%s dest=%s\n", debugstr_w(szSrc), debugstr_w(szDest)); TRACE ("src=%s dest=%s\n", debugstr_w(szSrc), debugstr_w(szDest));
if (!wcscmp(szSrc, szDest)) if (!wcscmp(szSrc, szDest))
{ {
/* src and destination is the same */ /* src and destination is the same */
HRESULT hr = S_OK;
if (pPidlOut) if (pPidlOut)
hr = _ILCreateFromPathW(szDest, pPidlOut); hr = SHILClone(pidl, pPidlOut);
return hr;
} }
else if (MoveFileW(szSrc, szDest))
if (MoveFileW (szSrc, szDest))
{ {
HRESULT hr = S_OK;
if (pPidlOut) if (pPidlOut)
hr = _ILCreateFromPathW(szDest, pPidlOut); hr = ParseDisplayName(hwndOwner, NULL, PathFindFileNameW(szDest), NULL, pPidlOut, NULL);
SHChangeNotify (bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, SHChangeNotify(bIsFolder ? SHCNE_RENAMEFOLDER : SHCNE_RENAMEITEM, SHCNF_PATHW, szSrc, szDest);
SHCNF_PATHW, szSrc, szDest);
return hr;
} }
else
return E_FAIL; {
hr = HResultFromWin32(GetLastError());
}
return hr;
} }
HRESULT WINAPI CFSFolder::GetDefaultSearchGUID(GUID * pguid) HRESULT WINAPI CFSFolder::GetDefaultSearchGUID(GUID * pguid)

View file

@ -772,8 +772,7 @@ HRESULT WINAPI CRegFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, /*
if (res == ERROR_SUCCESS) if (res == ERROR_SUCCESS)
{ {
*pPidlOut = ILClone(pidl); return pPidlOut ? SHILClone(pidl, pPidlOut) : S_OK;
return S_OK;
} }
return E_FAIL; return E_FAIL;