Author: rharabien Date: Tue Jan 10 16:53:46 2012 New Revision: 54904
URL: http://svn.reactos.org/svn/reactos?rev=54904&view=rev Log: [SHELL32] - Make File Properties code safer and better - Change version information when it user selects item in listbox (in previous version user had to double click) - Show filename only in Open With dialog. Part of patch by EDIJS (#6772)
Modified: trunk/reactos/dll/win32/shell32/fprop.cpp trunk/reactos/dll/win32/shell32/openwithmenu.cpp
Modified: trunk/reactos/dll/win32/shell32/fprop.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/fprop.cpp... ============================================================================== --- trunk/reactos/dll/win32/shell32/fprop.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/fprop.cpp [iso-8859-1] Tue Jan 10 16:53:46 2012 @@ -32,7 +32,8 @@
EXTERN_C HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj);
-static LONG SH_GetAssociatedApplication(WCHAR *pwszFileExt, WCHAR *pwszAssocApp) +static LONG +SH_GetAssociatedApplication(WCHAR *pwszFileExt, WCHAR *pwszAssocApp) { WCHAR wszBuf[MAX_PATH] = {0}; LONG result; @@ -59,7 +60,8 @@ return result; }
-static LONG SH_FileGeneralOpensWith(HWND hwndDlg, WCHAR *fileext) +static LONG +SH_FileGeneralOpensWith(HWND hwndDlg, WCHAR *fileext) { LONG result; WCHAR wAppName[MAX_PATH] = {0}; @@ -89,7 +91,8 @@ * */
-LPWSTR SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf) +LPWSTR +SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf) { NUMBERFMTW nf; WCHAR szNumber[24]; @@ -234,7 +237,7 @@ * find executable name from registry, retrieve description from executable */
-BOOL +static BOOL SH_FileGeneralSetFileType(HWND hwndDlg, WCHAR *filext) { WCHAR name[MAX_PATH]; @@ -356,7 +359,7 @@ * formats a given LPFILETIME struct into readable user format */
-BOOL +static BOOL SHFileGeneralGetFileTimeString(LPFILETIME lpFileTime, WCHAR *lpResult) { FILETIME ft; @@ -385,7 +388,7 @@ * */
-BOOL +static BOOL SH_FileGeneralSetText(HWND hwndDlg, WCHAR *lpstr) { int flength; @@ -433,7 +436,7 @@ * */
-BOOL +static BOOL SH_FileGeneralSetFileSizeTime(HWND hwndDlg, WCHAR *lpfilename, PULARGE_INTEGER lpfilesize) { BOOL result; @@ -514,19 +517,20 @@ * */
-BOOL -SH_FileVersionQuerySetText(HWND hwndDlg, DWORD dlgId, LPVOID pInfo, WCHAR *text, WCHAR **resptr) -{ - UINT reslen; - - if (hwndDlg == NULL || resptr == NULL || text == NULL) - return FALSE; - - if (VerQueryValueW(pInfo, text, (LPVOID *)resptr, &reslen)) +static BOOL +SH_FileVersionQuerySetText(HWND hwndDlg, DWORD idCtrl, LPVOID pInfo, LPCWSTR pwszProp) +{ + UINT cbResult; + WCHAR *pwszResult = NULL; + + if (hwndDlg == NULL || pwszProp == NULL) + return FALSE; + + if (VerQueryValueW(pInfo, pwszProp, (LPVOID *)&pwszResult, &cbResult)) { /* file description property */ - TRACE("%s :: %s\n", debugstr_w(text), debugstr_w(*resptr)); - SetDlgItemTextW(hwndDlg, dlgId, *resptr); + TRACE("%s :: %s\n", debugstr_w(pwszProp), debugstr_w(pwszResult)); + SetDlgItemTextW(hwndDlg, idCtrl, pwszResult); return TRUE; }
@@ -541,7 +545,7 @@ * */
-BOOL +static BOOL SH_FileVersionQuerySetListText(HWND hwndDlg, LPVOID pInfo, LPCWSTR pwszProp, WORD wLang, WORD wCode) { HWND hDlgCtrl; @@ -576,86 +580,82 @@ * sets all file version properties in dialog */
-BOOL +static BOOL SH_FileVersionInitialize(HWND hwndDlg, LPCWSTR pwszFilename) { LPVOID pBuf; - DWORD versize; - DWORD handle; - LPVOID info = NULL; - UINT infolen; + DWORD cbBuf; + VS_FIXEDFILEINFO *pInfo = NULL; + UINT cBytes; WCHAR buff[256]; HWND hDlgCtrl; - WORD lang = 0; - WORD code = 0; - LPLANGANDCODEPAGE lplangcode; - WCHAR *str; + WORD wLang = 0, wCode = 0; + LPLANGANDCODEPAGE lpLangCode;
if (pwszFilename == 0) return FALSE;
- if (!(versize = GetFileVersionInfoSizeW(pwszFilename, &handle))) + if (!(cbBuf = GetFileVersionInfoSizeW(pwszFilename, NULL))) { WARN("GetFileVersionInfoSize failed\n"); return FALSE; }
- if (!(pBuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, versize))) - { - WARN("HeapAlloc failed bytes %x\n", versize); - return FALSE; - } - - if (!GetFileVersionInfoW(pwszFilename, handle, versize, pBuf)) + if (!(pBuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbBuf))) + { + WARN("HeapAlloc failed bytes %x\n", cbBuf); + return FALSE; + } + + if (!GetFileVersionInfoW(pwszFilename, 0, cbBuf, pBuf)) { HeapFree(GetProcessHeap(), 0, pBuf); return FALSE; }
- if (VerQueryValueW(pBuf, L"\", &info, &infolen)) - { - VS_FIXEDFILEINFO *inf = (VS_FIXEDFILEINFO *)info; - swprintf(buff, L"%u.%u.%u.%u", HIWORD(inf->dwFileVersionMS), - LOWORD(inf->dwFileVersionMS), - HIWORD(inf->dwFileVersionLS), - LOWORD(inf->dwFileVersionLS)); - TRACE("MS %x LS %x res %s \n", inf->dwFileVersionMS, inf->dwFileVersionLS, debugstr_w(buff)); + if (VerQueryValueW(pBuf, L"\", (PVOID*)&pInfo, &cBytes)) + { + swprintf(buff, L"%u.%u.%u.%u", HIWORD(pInfo->dwFileVersionMS), + LOWORD(pInfo->dwFileVersionMS), + HIWORD(pInfo->dwFileVersionLS), + LOWORD(pInfo->dwFileVersionLS)); + TRACE("MS %x LS %x res %s \n", pInfo->dwFileVersionMS, pInfo->dwFileVersionLS, debugstr_w(buff)); SetDlgItemTextW(hwndDlg, 14001, buff); }
- if (VerQueryValueW(pBuf, L"VarFileInfo\Translation", (LPVOID *)&lplangcode, &infolen)) + if (VerQueryValueW(pBuf, L"VarFileInfo\Translation", (LPVOID *)&lpLangCode, &cBytes)) { /* FIXME find language from current locale / if not available, * default to english * for now default to first available language */ - lang = lplangcode->lang; - code = lplangcode->code; - } - - swprintf(buff, L"\StringFileInfo\%04x%04x\FileDescription", lang, code); - SH_FileVersionQuerySetText(hwndDlg, 14003, pBuf, buff, &str); - - swprintf(buff, L"\StringFileInfo\%04x%04x\LegalCopyright", lang, code); - SH_FileVersionQuerySetText(hwndDlg, 14005, pBuf, buff, &str); + wLang = lpLangCode->lang; + wCode = lpLangCode->code; + } + + swprintf(buff, L"\StringFileInfo\%04x%04x\FileDescription", wLang, wCode); + SH_FileVersionQuerySetText(hwndDlg, 14003, pBuf, buff); + + swprintf(buff, L"\StringFileInfo\%04x%04x\LegalCopyright", wLang, wCode); + SH_FileVersionQuerySetText(hwndDlg, 14005, pBuf, buff);
/* listbox properties */ - SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"CompanyName", lang, code); - SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"FileVersion", lang, code); - SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"InternalName", lang, code); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"CompanyName", wLang, wCode); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"FileVersion", wLang, wCode); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"InternalName", wLang, wCode);
/* FIXME insert language identifier */
- SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"OriginalFilename", lang, code); - SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductName", lang, code); - SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductVersion", lang, code); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"OriginalFilename", wLang, wCode); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductName", wLang, wCode); + SH_FileVersionQuerySetListText(hwndDlg, pBuf, L"ProductVersion", wLang, wCode); SetWindowLongPtr(hwndDlg, DWL_USER, (LONG_PTR)pBuf);
/* select first item */ hDlgCtrl = GetDlgItem(hwndDlg, 14009); SendMessageW(hDlgCtrl, LB_SETCURSEL, 0, 0); - str = (WCHAR *) SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0, (LPARAM)NULL); - SetDlgItemTextW(hwndDlg, 14010, str); + LPCWSTR pwszText = (WCHAR *)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0, (LPARAM)NULL); + SetDlgItemTextW(hwndDlg, 14010, pwszText);
return TRUE; } @@ -667,64 +667,55 @@ * wnd proc of 'Version' property sheet page */
-INT_PTR -CALLBACK +INT_PTR CALLBACK SH_FileVersionDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - LPPROPSHEETPAGE ppsp; - WCHAR *lpstr; - LPVOID buf; - switch (uMsg) { case WM_INITDIALOG: - ppsp = (LPPROPSHEETPAGE)lParam; + { + LPPROPSHEETPAGE ppsp = (LPPROPSHEETPAGE)lParam;
if (ppsp == NULL) break;
TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg, lParam, ppsp->lParam);
- lpstr = (WCHAR *)ppsp->lParam; - - if (lpstr == NULL) + LPCWSTR pwszFilename = (LPCWSTR)ppsp->lParam; + + if (pwszFilename == NULL) break;
- return SH_FileVersionInitialize(hwndDlg, lpstr); - + return SH_FileVersionInitialize(hwndDlg, pwszFilename); + } case WM_COMMAND: - if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_DBLCLK) + if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_SELCHANGE) { - HWND hDlgCtrl; - LRESULT lresult; - WCHAR *str; - - hDlgCtrl = GetDlgItem(hwndDlg, 14009); - lresult = SendMessageW(hDlgCtrl, LB_GETCURSEL, (WPARAM)NULL, (LPARAM)NULL); - - if (lresult == LB_ERR) + HWND hDlgCtrl = (HWND)lParam; + + LRESULT Index = SendMessageW(hDlgCtrl, LB_GETCURSEL, (WPARAM)NULL, (LPARAM)NULL); + if (Index == LB_ERR) break;
- str = (WCHAR *)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)lresult, (LPARAM)NULL); - - if (str == NULL) + LPCWSTR pwszData = (LPCWSTR)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)Index, (LPARAM)NULL); + if (pwszData == NULL) break;
- TRACE("hDlgCtrl %x string %s \n", hDlgCtrl, debugstr_w(str)); - SetDlgItemTextW(hwndDlg, 14010, str); + TRACE("hDlgCtrl %x string %s\n", hDlgCtrl, debugstr_w(pwszData)); + SetDlgItemTextW(hwndDlg, 14010, pwszData);
return TRUE; } break; - case WM_DESTROY: - buf = (LPVOID) GetWindowLongPtr(hwndDlg, DWL_USER); - HeapFree(GetProcessHeap(), 0, buf); + { + LPVOID pBuf = (LPVOID)GetWindowLongPtr(hwndDlg, DWL_USER); + HeapFree(GetProcessHeap(), 0, pBuf); break; - + } default: break; } @@ -740,48 +731,45 @@ * */
-INT_PTR -CALLBACK +INT_PTR CALLBACK SH_FileGeneralDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { - LPPROPSHEETPAGEW ppsp; - WCHAR *lpstr; - switch (uMsg) { case WM_INITDIALOG: - ppsp = (LPPROPSHEETPAGEW)lParam; + { + LPPROPSHEETPAGEW ppsp = (LPPROPSHEETPAGEW)lParam;
if (ppsp == NULL) break;
TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %S\n", hwndDlg, lParam, ppsp->lParam);
- lpstr = (WCHAR *)ppsp->lParam; - - if (lpstr == NULL) + WCHAR *pwszFilename = (WCHAR *)ppsp->lParam; + + if (pwszFilename == NULL) { ERR("no filename\n"); break; }
/* set general text properties filename filelocation and icon */ - SH_FileGeneralSetText(hwndDlg, lpstr); + SH_FileGeneralSetText(hwndDlg, pwszFilename);
/* enumerate file extension from registry and application which opens it */ - SH_FileGeneralSetFileType(hwndDlg, wcsrchr(lpstr, L'.')); + SH_FileGeneralSetFileType(hwndDlg, wcsrchr(pwszFilename, L'.'));
/* set opens with */ - SH_FileGeneralOpensWith(hwndDlg, wcsrchr(lpstr, L'.')); + SH_FileGeneralOpensWith(hwndDlg, wcsrchr(pwszFilename, L'.'));
/* set file time create/modfied/accessed */ - SH_FileGeneralSetFileSizeTime(hwndDlg, lpstr, NULL); + SH_FileGeneralSetFileSizeTime(hwndDlg, pwszFilename, NULL);
return TRUE; - + } default: break; } @@ -789,8 +777,7 @@ return FALSE; }
-BOOL -CALLBACK +static BOOL CALLBACK AddShellPropSheetExCallback(HPROPSHEETPAGE hPage, LPARAM lParam) { PROPSHEETHEADERW *pInfo = (PROPSHEETHEADERW *)lParam; @@ -804,48 +791,33 @@ return FALSE; }
-int -EnumPropSheetExt(LPWSTR wFileName, PROPSHEETHEADERW *pInfo, int NumPages, HPSXA *phpsxa, IDataObject *pDataObj) -{ - WCHAR szName[MAX_PATH] = { 0 }; - WCHAR *pOffset; - UINT Length; +static int +EnumPropSheetExt(LPCWSTR pwszPath, PROPSHEETHEADERW *pInfo, int NumPages, HPSXA *phpsxa, IDataObject *pDataObj) +{ + WCHAR wszName[MAX_PATH]; + WCHAR *pwszExt; + UINT cchPath; DWORD dwName; int Pages; CLSID clsid;
- pOffset = wcsrchr(wFileName, L'.'); - - if (!pOffset) - { - Length = wcslen(szName); - - if (Length + 6 > sizeof(szName) / sizeof(szName[0])) - return 0; - - if (CLSIDFromString(wFileName, &clsid) == NOERROR) - { - wcscpy(szName, L"CLSID\"); - wcscpy(&szName[6], wFileName); - } + pwszExt = PathFindExtensionW(pwszPath); + + if (!pwszExt[0]) + { + cchPath = wcslen(pwszPath); + + if (CLSIDFromString(pwszPath, &clsid) == NOERROR) + StringCbPrintfW(wszName, sizeof(wszName), L"CLSID\%s", pwszPath); else - { - wcscpy(szName, wFileName); - } + StringCbCopyW(wszName, sizeof(wszName), pwszPath); } else - { - Length = wcslen(pOffset); - - if (Length >= sizeof(szName) / sizeof(szName[0])) - return 0; - - wcscpy(szName, pOffset); - } - - TRACE("EnumPropSheetExt szName %s\n", debugstr_w(szName)); - - phpsxa[0] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, szName, NumPages, pDataObj); + StringCbCopyW(wszName, sizeof(wszName), pwszExt); + + TRACE("EnumPropSheetExt wszName %s\n", debugstr_w(wszName)); + + phpsxa[0] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, wszName, NumPages, pDataObj); Pages = SHAddFromPropSheetExtArray(phpsxa[0], AddShellPropSheetExCallback, (LPARAM)pInfo);
phpsxa[1] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, L"*", NumPages - Pages, pDataObj); @@ -853,16 +825,15 @@
phpsxa[2] = NULL;
- if (pOffset) + if (pwszExt) { /* try to load property sheet handlers from prog id key */ - dwName = sizeof(szName); - - if (RegGetValueW(HKEY_CLASSES_ROOT, pOffset, NULL, RRF_RT_REG_SZ, NULL, szName, &dwName) == ERROR_SUCCESS) + dwName = sizeof(wszName); + + if (RegGetValueW(HKEY_CLASSES_ROOT, pwszExt, L"", RRF_RT_REG_SZ, NULL, wszName, &dwName) == ERROR_SUCCESS) { - TRACE("EnumPropSheetExt szName %s, pOffset %s\n", debugstr_w(szName), debugstr_w(pOffset)); - szName[(sizeof(szName) / sizeof(WCHAR)) - 1] = L'\0'; - phpsxa[2] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, szName, NumPages - Pages, pDataObj); + TRACE("EnumPropSheetExt wszName %s, pwszExt %s\n", debugstr_w(wszName), debugstr_w(pwszExt)); + phpsxa[2] = SHCreatePropSheetExtArrayEx(HKEY_CLASSES_ROOT, wszName, NumPages - Pages, pDataObj); Pages += SHAddFromPropSheetExtArray(phpsxa[2], AddShellPropSheetExCallback, (LPARAM)pInfo); } } @@ -876,7 +847,7 @@ * * called from ShellExecuteExW32 * - * pwszPath contains (quoted) path of folder/file + * pwszPath contains path of folder/file * * TODO: provide button change application type if file has registered type * make filename field editable and apply changes to filename on close @@ -885,93 +856,63 @@ BOOL SH_ShowPropertiesDialog(LPCWSTR pwszPath, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl) { - PROPSHEETHEADERW Info; + HRESULT hr; HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; - WCHAR wFileName[MAX_PATH]; - DWORD dwHandle = 0; - WCHAR *pFileName; - HPSXA hpsxa[3]; - INT_PTR res; - CComPtr<IDataObject> pDataObj; - HRESULT hResult; - DWORD wLength; + HPSXA hpsxa[3] = {};
TRACE("SH_ShowPropertiesDialog entered filename %s\n", debugstr_w(pwszPath));
- if (pwszPath == NULL) - return FALSE; - - if (!wcslen(pwszPath)) + if (pwszPath == NULL || !wcslen(pwszPath)) return FALSE;
memset(hppages, 0x0, sizeof(HPROPSHEETPAGE) * MAX_PROPERTY_SHEET_PAGE);
- if (pwszPath[0] == L'"') - { - /* remove quotes from pwszPath */ - LPCWSTR src = pwszPath + 1; - LPWSTR dst = wFileName; - - while (*src && *src != L'"') - *dst++ = *src++; - - *dst = L'\0'; - } - else - { - wcscpy(wFileName, pwszPath); - } + /* Make a copy of path */ + WCHAR wszPath[MAX_PATH]; + StringCbCopyW(wszPath, sizeof(wszPath), pwszPath);
// // get length // - wLength = wcslen(wFileName); - if (wFileName[wLength-1] == L'\' && wLength > 3) + INT cchPath = wcslen(wszPath); + if (cchPath > 3 && wszPath[cchPath-1] == L'\') { // // remove trailing \ at the end of path // - wFileName[wLength-1] = L'\0'; - } - - if (PathIsRootW(wFileName)) - { - return SH_ShowDriveProperties(wFileName, pidlFolder, apidl); - } - - if (PathIsDirectoryW(wFileName)) - { - return SH_ShowFolderProperties(wFileName, pidlFolder, apidl); - } - - - pFileName = wcsrchr(wFileName, L'\'); - - if (!pFileName) - pFileName = wFileName; - else - pFileName++; - + wszPath[cchPath-1] = L'\0'; + } + + if (PathIsRootW(wszPath)) + return SH_ShowDriveProperties(wszPath, pidlFolder, apidl); + + if (PathIsDirectoryW(wszPath)) + return SH_ShowFolderProperties(wszPath, pidlFolder, apidl); + + LPCWSTR pwszFilename = PathFindFileNameW(wszPath); + + PROPSHEETHEADERW Info; memset(&Info, 0x0, sizeof(PROPSHEETHEADERW)); Info.dwSize = sizeof(PROPSHEETHEADERW); Info.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE; Info.phpage = hppages; - Info.pszCaption = pFileName; + Info.pszCaption = pwszFilename;
hppages[Info.nPages] = SH_CreatePropertySheetPage("SHELL_FILE_GENERAL_DLG", SH_FileGeneralDlgProc, - (LPARAM)wFileName, + (LPARAM)wszPath, NULL);
if (hppages[Info.nPages]) Info.nPages++;
- hResult = SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (LPVOID *)&pDataObj); - - if (hResult == S_OK) - { - if (!EnumPropSheetExt(wFileName, &Info, MAX_PROPERTY_SHEET_PAGE - 1, hpsxa, pDataObj)) + CComPtr<IDataObject> pDataObj; + hr = SHCreateDataObject(pidlFolder, 1, apidl, NULL, IID_IDataObject, (LPVOID *)&pDataObj); + + if (hr == S_OK) + { + if (!EnumPropSheetExt(wszPath, &Info, MAX_PROPERTY_SHEET_PAGE - 1, hpsxa, pDataObj)) { hpsxa[0] = NULL; hpsxa[1] = NULL; @@ -979,20 +920,20 @@ } }
- if (GetFileVersionInfoSizeW(pwszPath, &dwHandle)) + if (GetFileVersionInfoSizeW(wszPath, NULL)) { hppages[Info.nPages] = SH_CreatePropertySheetPage("SHELL_FILE_VERSION_DLG", SH_FileVersionDlgProc, - (LPARAM)wFileName, + (LPARAM)wszPath, NULL); if (hppages[Info.nPages]) Info.nPages++; }
- res = PropertySheetW(&Info); - - if (hResult == S_OK) + INT_PTR res = PropertySheetW(&Info); + + if (hr == S_OK) { SHDestroyPropSheetExtArray(hpsxa[0]); SHDestroyPropSheetExtArray(hpsxa[1]);
Modified: trunk/reactos/dll/win32/shell32/openwithmenu.cpp URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/openwithm... ============================================================================== --- trunk/reactos/dll/win32/shell32/openwithmenu.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/openwithmenu.cpp [iso-8859-1] Tue Jan 10 16:53:46 2012 @@ -909,7 +909,7 @@
/* Add filename to label */ cchBuf = GetDlgItemTextW(hwnd, 14001, wszBuf, _countof(wszBuf)); - StringCchCopyW(wszBuf + cchBuf, _countof(wszBuf) - cchBuf, m_pInfo->pcszFile); + StringCchCopyW(wszBuf + cchBuf, _countof(wszBuf) - cchBuf, PathFindFileNameW(m_pInfo->pcszFile)); SetDlgItemTextW(hwnd, 14001, wszBuf);
/* Load applications from registry */