Author: hbelusca
Date: Wed Jan 18 11:51:42 2017
New Revision: 73578
URL:
http://svn.reactos.org/svn/reactos?rev=73578&view=rev
Log:
[SHELL32]
- Now that we correctly handle the shell link data block list with APIs, no need to hack
an extra zeroed DWORD at the end of shortcut files!
- Fix the display of the shortcut target location: this typically displays the (last)
directory where the target resides. Addendum for r53624, r54957 and CORE-5730 CORE-6104
Modified:
trunk/reactos/dll/win32/shell32/CShellLink.cpp
Modified: trunk/reactos/dll/win32/shell32/CShellLink.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CShellLi…
==============================================================================
--- trunk/reactos/dll/win32/shell32/CShellLink.cpp [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/CShellLink.cpp [iso-8859-1] Wed Jan 18 11:51:42 2017
@@ -750,11 +750,6 @@
m_bRunAs = TRUE;
else
m_bRunAs = FALSE;
-
- DWORD dwZero;
- hr = stm->Read(&dwZero, sizeof(dwZero), &dwBytesRead);
- if (FAILED(hr) || dwZero || dwBytesRead != sizeof(dwZero))
- ERR("Last word was not zero\n");
TRACE("OK\n");
@@ -971,10 +966,6 @@
/* Clear the dirty bit if requested */
if (fClearDirty)
m_bDirty = FALSE;
-
- /* The last field is a single zero dword */
- DWORD dwZero = 0;
- hr = stm->Write(&dwZero, sizeof(dwZero), &count);
return hr;
}
@@ -2733,7 +2724,10 @@
StringCchPrintfExW(wszBuf, _countof(wszBuf), &pwszEnd, &cchRemaining,
0, L"%s ", pwszExt + 1);
}
else
- StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s (%s)", fi.szTypeName,
pwszExt); /* Update file type */
+ {
+ /* Update file type */
+ StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s (%s)", fi.szTypeName,
pwszExt);
+ }
}
return wszBuf;
@@ -2768,7 +2762,7 @@
/* Get file information */
// FIXME! FIXME! Shouldn't we use pThis->m_sIcoPath,
pThis->m_Header.nIconIndex instead???
SHFILEINFOW fi;
- if (!SHGetFileInfoW(pThis->m_sLinkPath, 0, &fi, sizeof(fi),
SHGFI_TYPENAME|SHGFI_ICON))
+ if (!SHGetFileInfoW(pThis->m_sLinkPath, 0, &fi, sizeof(fi),
SHGFI_TYPENAME | SHGFI_ICON))
{
ERR("SHGetFileInfoW failed for %ls (%lu)\n",
pThis->m_sLinkPath, GetLastError());
fi.szTypeName[0] = L'\0';
@@ -2780,15 +2774,20 @@
else
ERR("ExtractIconW failed %ls %u\n", pThis->m_sIcoPath,
pThis->m_Header.nIconIndex);
- /* target type */
+ /* Target type */
if (pThis->m_sPath)
SetDlgItemTextW(hwndDlg, 14005,
SH_GetTargetTypeByPath(pThis->m_sPath));
- /* target location */
- if (pThis->m_sWorkDir)
- SetDlgItemTextW(hwndDlg, 14007, PathFindFileName(pThis->m_sWorkDir));
-
- /* target path */
+ /* Target location */
+ if (pThis->m_sPath)
+ {
+ WCHAR target[MAX_PATH];
+ StringCchCopyW(target, _countof(target), pThis->m_sPath);
+ PathRemoveFileSpecW(target);
+ SetDlgItemTextW(hwndDlg, 14007, PathFindFileNameW(target));
+ }
+
+ /* Target path */
if (pThis->m_sPath)
{
WCHAR newpath[2*MAX_PATH] = L"\0";
@@ -2804,16 +2803,18 @@
}
SetDlgItemTextW(hwndDlg, 14009, newpath);
}
- /* working dir */
+
+ /* Working dir */
if (pThis->m_sWorkDir)
SetDlgItemTextW(hwndDlg, 14011, pThis->m_sWorkDir);
- /* description */
+ /* Description */
if (pThis->m_sDescription)
SetDlgItemTextW(hwndDlg, 14019, pThis->m_sDescription);
return TRUE;
}
+
case WM_NOTIFY:
{
LPPSHNOTIFY lppsn = (LPPSHNOTIFY)lParam;
@@ -2849,7 +2850,7 @@
if (!PathFileExistsW(unquoted))
{
- //FIXME load localized error msg
+ // FIXME load localized error msg
MessageBoxW(hwndDlg, L"The specified file name in the target box
is invalid", L"Error", MB_ICONERROR);
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT,
PSNRET_INVALID_NOCHANGEPAGE);
return TRUE;
@@ -2870,6 +2871,7 @@
}
break;
}
+
case WM_COMMAND:
switch(LOWORD(wParam))
{
@@ -2880,6 +2882,7 @@
/// open target directory
///
return TRUE;
+
case 14021:
{
WCHAR wszPath[MAX_PATH] = L"";
@@ -2892,6 +2895,7 @@
pThis->SetIconLocation(wszPath, IconIndex);
///
/// FIXME redraw icon
+ ///
}
return TRUE;
}
@@ -2914,6 +2918,7 @@
if (HIWORD(wParam) == EN_CHANGE)
PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break;
+
default:
break;
}