From da5e391c9cb46cf32ee88561f4c6514e205283c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Wed, 12 Jan 2005 22:49:57 +0000 Subject: [PATCH] Sync to Wine-20050111: Jon Griffiths - Remove unneeded headers to reduce unneeded rebuilds. Jacek Caban - Get rid of W->A call. Michael Stefaniuc - Do not check for non NULL pointer before HeapFree'ing it. It's redundant. Alexandre Julliard - Remove some no longer needed AW functions. - Janitorial: C booleans must not be compared against TRUE. Hans Leidekker - Stub implementations for SHUpdateImageA, SHHandleUpdateImage, SHObjectProperties, SHGetNewLinkInfo{A,W}, SHStartNetConnectionDialog, SHEmptyRecycleBin{A,W}, SHFormatDrive, SHQueryRecycleBin{A,W}. - 'HeapAlloc can fail' fix for ExtractIconExA. - Implement ExtractAssociatedIconA -> W. - Correct prototype for SHObjectProperties. - Forward SHGetNewLinkInfo to SHGetNewLinkInfoA. Robert Shearman - Remove unnecessary WNDPROC casts. - Don't sort the children of My Computer in shell browse for folder dialog. Eric Pouech - Removed excessive statement (break after return or goto, not useful break, not needed vars...) - Fixed some errors in function prototypes. Jose Manuel Ferrer Ortiz - Added some Spanish translations. Juan Lang - Revert shell32 version to Win2K SP4 level. Rein Klazes - ShellExecuteEx, ExtractIconEx, SHFileOperation, SHGetFileInfo, SHGetPathFromIDList spec entries always refer to the Ansi version. Problem found by Paul Vriens. svn path=/trunk/; revision=12998 --- reactos/lib/shell32/autocomplete.c | 6 +- reactos/lib/shell32/brsfolder.c | 10 +-- reactos/lib/shell32/changenotify.c | 2 - reactos/lib/shell32/cpanelfolder.c | 1 - reactos/lib/shell32/enumidlist.c | 4 -- reactos/lib/shell32/folders.c | 2 - reactos/lib/shell32/iconcache.c | 95 +++++++++++++++-------------- reactos/lib/shell32/pidl.c | 15 +---- reactos/lib/shell32/shell32.spec | 42 ++++++------- reactos/lib/shell32/shell32_Es.rc | 32 ++++++++++ reactos/lib/shell32/shell32_main.c | 23 ++----- reactos/lib/shell32/shelllink.c | 57 ++++++----------- reactos/lib/shell32/shellole.c | 2 +- reactos/lib/shell32/shellord.c | 87 +++++++++++++++++++++++++- reactos/lib/shell32/shellreg.c | 1 - reactos/lib/shell32/shfldr_mycomp.c | 1 - reactos/lib/shell32/shlexec.c | 18 +----- reactos/lib/shell32/shlfileop.c | 14 +---- reactos/lib/shell32/shlfolder.c | 3 - reactos/lib/shell32/shlfsbind.c | 1 - reactos/lib/shell32/shlview.c | 4 +- reactos/lib/shell32/systray.c | 2 +- reactos/lib/shell32/undocshell.h | 2 +- reactos/lib/shell32/version.h | 8 +-- 24 files changed, 229 insertions(+), 203 deletions(-) diff --git a/reactos/lib/shell32/autocomplete.c b/reactos/lib/shell32/autocomplete.c index bca20030cf6..b947fccdec1 100644 --- a/reactos/lib/shell32/autocomplete.c +++ b/reactos/lib/shell32/autocomplete.c @@ -187,10 +187,8 @@ static ULONG WINAPI IAutoComplete_fnRelease( if (!--(This->ref)) { TRACE(" destroying IAutoComplete(%p)\n",This); - if (This->quickComplete) - HeapFree(GetProcessHeap(), 0, This->quickComplete); - if (This->txtbackup) - HeapFree(GetProcessHeap(), 0, This->txtbackup); + HeapFree(GetProcessHeap(), 0, This->quickComplete); + HeapFree(GetProcessHeap(), 0, This->txtbackup); if (This->hwndListBox) DestroyWindow(This->hwndListBox); if (This->enumstr) diff --git a/reactos/lib/shell32/brsfolder.c b/reactos/lib/shell32/brsfolder.c index cfce80ce132..a4786ced83d 100644 --- a/reactos/lib/shell32/brsfolder.c +++ b/reactos/lib/shell32/brsfolder.c @@ -330,7 +330,10 @@ static LRESULT MsgNotify(HWND hWnd, UINT CtlID, LPNMHDR lpnmh) if (SUCCEEDED(IShellFolder_BindToObject(lptvid->lpsfParent, lptvid->lpi,0,(REFIID)&IID_IShellFolder,(LPVOID *)&lpsf2))) { FillTreeView( lpsf2, lptvid->lpifq, pnmtv->itemNew.hItem, lptvid->pEnumIL); } - TreeView_SortChildren(hwndTreeView, pnmtv->itemNew.hItem, FALSE); + /* My Computer is already sorted and trying to do a simple text + * sort will only mess things up */ + if (!_ILIsMyComputer(lptvid->lpi)) + TreeView_SortChildren(hwndTreeView, pnmtv->itemNew.hItem, FALSE); } break; case TVN_SELCHANGEDA: @@ -491,10 +494,7 @@ LPITEMIDLIST WINAPI SHBrowseForFolderA (LPBROWSEINFOA lpbi) WideCharToMultiByte(CP_ACP, 0, bi.pszDisplayName, -1, lpbi->pszDisplayName, MAX_PATH, 0, NULL); HeapFree(GetProcessHeap(), 0, bi.pszDisplayName); } - if (bi.lpszTitle) - { - HeapFree(GetProcessHeap(), 0, (LPVOID)bi.lpszTitle); - } + HeapFree(GetProcessHeap(), 0, (LPVOID)bi.lpszTitle); lpbi->iImage = bi.iImage; return lpid; } diff --git a/reactos/lib/shell32/changenotify.c b/reactos/lib/shell32/changenotify.c index b6234b3a1ff..47a7b697d24 100644 --- a/reactos/lib/shell32/changenotify.c +++ b/reactos/lib/shell32/changenotify.c @@ -27,9 +27,7 @@ #include "winbase.h" #include "wine/debug.h" #include "wingdi.h" -#include "pidl.h" #include "shell32_main.h" -#include "undocshell.h" WINE_DEFAULT_DEBUG_CHANNEL(shell); diff --git a/reactos/lib/shell32/cpanelfolder.c b/reactos/lib/shell32/cpanelfolder.c index dfb47454bd1..c207556209b 100644 --- a/reactos/lib/shell32/cpanelfolder.c +++ b/reactos/lib/shell32/cpanelfolder.c @@ -47,7 +47,6 @@ #include "shell32_main.h" #include "shresdef.h" #include "shlwapi.h" -#include "shellfolder.h" #include "wine/debug.h" #include "debughlp.h" #include "shfldr.h" diff --git a/reactos/lib/shell32/enumidlist.c b/reactos/lib/shell32/enumidlist.c index ea45a23dbd9..54a761e0693 100644 --- a/reactos/lib/shell32/enumidlist.c +++ b/reactos/lib/shell32/enumidlist.c @@ -28,13 +28,9 @@ #include "windef.h" #include "winbase.h" #include "winreg.h" -#include "undocshell.h" #include "shlwapi.h" -#include "winerror.h" -#include "objbase.h" #include "pidl.h" -#include "shlguid.h" #include "enumidlist.h" WINE_DEFAULT_DEBUG_CHANNEL(shell); diff --git a/reactos/lib/shell32/folders.c b/reactos/lib/shell32/folders.c index c3664909942..808648f75cc 100644 --- a/reactos/lib/shell32/folders.c +++ b/reactos/lib/shell32/folders.c @@ -34,10 +34,8 @@ #include "undocshell.h" #include "shlguid.h" #include "winreg.h" -#include "shlwapi.h" #include "wine/debug.h" -#include "wine/unicode.h" #include "pidl.h" #include "shell32_main.h" diff --git a/reactos/lib/shell32/iconcache.c b/reactos/lib/shell32/iconcache.c index ef28e52c969..d5f833eb584 100644 --- a/reactos/lib/shell32/iconcache.c +++ b/reactos/lib/shell32/iconcache.c @@ -43,7 +43,6 @@ #include "pidl.h" #include "shell32_main.h" #include "undocshell.h" -#include "shlwapi.h" WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -419,15 +418,6 @@ INT WINAPI Shell_GetCachedImageIndexAW(LPCVOID szPath, INT nIndex, BOOL bSimulat return Shell_GetCachedImageIndexA(szPath, nIndex, bSimulateDoc); } -/************************************************************************* - * ExtractIconEx [SHELL32.@] - */ -UINT WINAPI ExtractIconExAW(LPCVOID lpszFile, INT nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT nIcons) -{ if (SHELL_OsIsUnicode()) - return ExtractIconExW ( lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); - return ExtractIconExA ( lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); -} - /************************************************************************* * ExtractIconExW [SHELL32.@] * RETURNS @@ -460,15 +450,18 @@ UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON * phiconLarge */ UINT WINAPI ExtractIconExA(LPCSTR lpszFile, INT nIconIndex, HICON * phiconLarge, HICON * phiconSmall, UINT nIcons) { - UINT ret; + UINT ret = 0; INT len = MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, NULL, 0); LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); TRACE("%s %i %p %p %i\n", lpszFile, nIconIndex, phiconLarge, phiconSmall, nIcons); - MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, lpwstrFile, len); - ret = ExtractIconExW (lpwstrFile, nIconIndex, phiconLarge, phiconSmall, nIcons); - HeapFree(GetProcessHeap(), 0, lpwstrFile); + if (lpwstrFile) + { + MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, lpwstrFile, len); + ret = ExtractIconExW(lpwstrFile, nIconIndex, phiconLarge, phiconSmall, nIcons); + HeapFree(GetProcessHeap(), 0, lpwstrFile); + } return ret; } @@ -480,43 +473,55 @@ UINT WINAPI ExtractIconExA(LPCSTR lpszFile, INT nIconIndex, HICON * phiconLarge, */ HICON WINAPI ExtractAssociatedIconA(HINSTANCE hInst, LPSTR lpIconPath, LPWORD lpiIcon) { - HICON hIcon; - WORD wDummyIcon = 0; - - TRACE("\n"); + HICON hIcon = NULL; + INT len = MultiByteToWideChar(CP_ACP, 0, lpIconPath, -1, NULL, 0); + LPWSTR lpIconPathW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - if(lpiIcon == NULL) - lpiIcon = &wDummyIcon; + TRACE("%p %s %p\n", hInst, debugstr_a(lpIconPath), lpiIcon); - hIcon = ExtractIconA(hInst, lpIconPath, *lpiIcon); + if (lpIconPathW) + { + MultiByteToWideChar(CP_ACP, 0, lpIconPath, -1, lpIconPathW, len); + hIcon = ExtractAssociatedIconW(hInst, lpIconPathW, lpiIcon); + HeapFree(GetProcessHeap(), 0, lpIconPathW); + } + return hIcon; +} - if( hIcon < (HICON)2 ) - { if( hIcon == (HICON)1 ) /* no icons found in given file */ - { char tempPath[0x80]; - HINSTANCE uRet = FindExecutableA(lpIconPath,NULL,tempPath); +HICON WINAPI ExtractAssociatedIconW(HINSTANCE hInst, LPWSTR lpIconPath, LPWORD lpiIcon) +{ + HICON hIcon = NULL; + WORD wDummyIcon = 0; - if( uRet > (HINSTANCE)32 && tempPath[0] ) - { strcpy(lpIconPath,tempPath); - hIcon = ExtractIconA(hInst, lpIconPath, *lpiIcon); - if( hIcon > (HICON)2 ) - return hIcon; - } - else hIcon = 0; - } + TRACE("%p %s %p\n", hInst, debugstr_w(lpIconPath), lpiIcon); - if( hIcon == (HICON)1 ) - *lpiIcon = 2; /* MSDOS icon - we found .exe but no icons in it */ - else - *lpiIcon = 6; /* generic icon - found nothing */ + if(lpiIcon == NULL) + lpiIcon = &wDummyIcon; - if (GetModuleFileNameA(hInst, lpIconPath, 0x80)) - { - /* terminate string (GetModuleFileName doesn't do if buffer is too small) */ - lpIconPath[0x80 - 1] = '\0'; - hIcon = LoadIconA( hInst, MAKEINTRESOURCEA(*lpiIcon)); - } - } - return hIcon; + hIcon = ExtractIconW(hInst, lpIconPath, *lpiIcon); + + if( hIcon < (HICON)2 ) + { if( hIcon == (HICON)1 ) /* no icons found in given file */ + { WCHAR tempPath[MAX_PATH]; + HINSTANCE uRet = FindExecutableW(lpIconPath,NULL,tempPath); + + if( uRet > (HINSTANCE)32 && tempPath[0] ) + { lstrcpyW(lpIconPath,tempPath); + hIcon = ExtractIconW(hInst, lpIconPath, *lpiIcon); + if( hIcon > (HICON)2 ) + return hIcon; + } + } + + if( hIcon == (HICON)1 ) + *lpiIcon = 2; /* MSDOS icon - we found .exe but no icons in it */ + else + *lpiIcon = 6; /* generic icon - found nothing */ + + if (GetModuleFileNameW(hInst, lpIconPath, MAX_PATH)) + hIcon = LoadIconW(hInst, MAKEINTRESOURCEW(*lpiIcon)); + } + return hIcon; } /************************************************************************* diff --git a/reactos/lib/shell32/pidl.c b/reactos/lib/shell32/pidl.c index 9b32239bf33..dcc4c567224 100644 --- a/reactos/lib/shell32/pidl.c +++ b/reactos/lib/shell32/pidl.c @@ -47,7 +47,6 @@ #include "shlwapi.h" #include "pidl.h" -#include "debughlp.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(pidl); @@ -1058,7 +1057,7 @@ LPITEMIDLIST WINAPI SHSimpleIDListFromPathA(LPCSTR lpszPath) _ILParsePathW(wPath, NULL, TRUE, &pidl, NULL); - if (wPath) HeapFree(GetProcessHeap(), 0, wPath); + HeapFree(GetProcessHeap(), 0, wPath); TRACE("%s %p\n", debugstr_a(lpszPath), pidl); return pidl; } @@ -1365,18 +1364,6 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath) return SUCCEEDED(hr); } -/************************************************************************* - * SHGetPathFromIDList [SHELL32.@][NT 4.0: SHELL32.219] - */ -BOOL WINAPI SHGetPathFromIDListAW(LPCITEMIDLIST pidl,LPVOID pszPath) -{ - TRACE_(shell)("(pidl=%p,%p)\n",pidl,pszPath); - - if (SHELL_OsIsUnicode()) - return SHGetPathFromIDListW(pidl,pszPath); - return SHGetPathFromIDListA(pidl,pszPath); -} - /************************************************************************* * SHBindToParent [shell version 5.0] */ diff --git a/reactos/lib/shell32/shell32.spec b/reactos/lib/shell32/shell32.spec index e7dc10f4d81..54c5479322a 100644 --- a/reactos/lib/shell32/shell32.spec +++ b/reactos/lib/shell32/shell32.spec @@ -169,9 +169,9 @@ 175 stdcall SHGetSpecialFolderPath(long long long long) SHGetSpecialFolderPathAW 176 stdcall SHSetInstanceExplorer (long) 177 stub DAD_SetDragImageFromListView - 178 stub SHObjectProperties - 179 stub SHGetNewLinkInfoA - 180 stub SHGetNewLinkInfoW + 178 stdcall SHObjectProperties(long long wstr wstr) + 179 stdcall SHGetNewLinkInfoA(str str ptr long long) + 180 stdcall SHGetNewLinkInfoW(wstr wstr ptr long long) 181 stdcall RegisterShellHook(long long) 182 varargs ShellMessageBoxW(long long long str long) 183 varargs ShellMessageBoxA(long long long str long) @@ -182,9 +182,9 @@ 188 stdcall ShellDDEInit(long) 189 stdcall ILCreateFromPathA(str) 190 stdcall ILCreateFromPathW(wstr) - 191 stub SHUpdateImageA + 191 stdcall SHUpdateImageA(str long long long) 192 stdcall SHUpdateImageW(wstr long long long) - 193 stub SHHandleUpdateImage + 193 stdcall SHHandleUpdateImage(ptr) 194 stub SHCreatePropSheetExtArrayEx 195 stdcall SHFree(ptr) 196 stdcall SHAlloc(long) @@ -206,7 +206,7 @@ 212 stub Printers_AddPrinterPropPages 213 stub Printers_RegisterWindowW 214 stub Printers_UnregisterWindow - 215 stub SHStartNetConnectionDialog + 215 stdcall SHStartNetConnectionDialog(long str long) 243 stdcall @(long long) shell32_243 244 stdcall SHInitRestricted(ptr ptr) 247 stdcall SHGetDataFromIDListA (ptr ptr long ptr long) @@ -235,15 +235,15 @@ 288 stdcall ShellAboutA(long str str long) 289 stdcall ShellAboutW(long wstr wstr long) 290 stdcall ShellExecuteA(long str str str str long) - 291 stdcall ShellExecuteEx (long) ShellExecuteExAW + 291 stdcall ShellExecuteEx (long) ShellExecuteExA 292 stdcall ShellExecuteExA (long) 293 stdcall ShellExecuteExW (long) 294 stdcall ShellExecuteW (long wstr wstr wstr wstr long) 296 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIconA 297 stdcall Shell_NotifyIconA(long ptr) 298 stdcall Shell_NotifyIconW(long ptr) - 299 stub Shl1632_ThunkData32 - 300 stub Shl3216_ThunkData32 +#299 stub Shl1632_ThunkData32 +#300 stub Shl3216_ThunkData32 301 stdcall StrChrA(str long) shlwapi.StrChrA 302 stdcall StrChrIA(str long) shlwapi.StrChrIA 303 stdcall StrChrIW(wstr long) shlwapi.StrChrIW @@ -338,12 +338,12 @@ @ stdcall DoEnvironmentSubstW(wstr wstr) @ stub DragQueryFileAorW @ stdcall DuplicateIcon(long long) -@ stdcall ExtractAssociatedIconA(long ptr long) +@ stdcall ExtractAssociatedIconA(long str ptr) @ stdcall ExtractAssociatedIconExA(long str long long) @ stdcall ExtractAssociatedIconExW(long wstr long long) -@ stub ExtractAssociatedIconW +@ stdcall ExtractAssociatedIconW(long wstr ptr) @ stdcall ExtractIconA(long str long) -@ stdcall ExtractIconEx(ptr long ptr ptr long)ExtractIconExAW +@ stdcall ExtractIconEx(ptr long ptr ptr long) ExtractIconExA @ stdcall ExtractIconExA(str long ptr ptr long) @ stdcall ExtractIconExW(wstr long ptr ptr long) @ stdcall ExtractIconW(long wstr long) @@ -376,21 +376,21 @@ @ stdcall SHCreateDirectoryExA(long str ptr) @ stdcall SHCreateDirectoryExW(long wstr ptr) @ stub ShellHookProc -@ stub SHEmptyRecycleBinA -@ stub SHEmptyRecycleBinW -@ stdcall SHFileOperation(ptr)SHFileOperationAW +@ stdcall SHEmptyRecycleBinA(long str long) +@ stdcall SHEmptyRecycleBinW(long wstr long) +@ stdcall SHFileOperation(ptr) SHFileOperationA @ stdcall SHFileOperationA(ptr) @ stdcall SHFileOperationW(ptr) -@ stub SHFormatDrive +@ stdcall SHFormatDrive(long long long long) @ stdcall SHFreeNameMappings(ptr) @ stdcall SHGetDesktopFolder(ptr) -@ stdcall SHGetFileInfo(ptr long ptr long long)SHGetFileInfoAW +@ stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfoA @ stdcall SHGetFileInfoA(ptr long ptr long long) @ stdcall SHGetFileInfoW(ptr long ptr long long) @ stdcall SHGetInstanceExplorer(long) @ stdcall SHGetMalloc(ptr) -@ stub SHGetNewLinkInfo -@ stdcall SHGetPathFromIDList(ptr ptr)SHGetPathFromIDListAW +@ stdcall SHGetNewLinkInfo(str str ptr long long) SHGetNewLinkInfoA +@ stdcall SHGetPathFromIDList(ptr ptr) SHGetPathFromIDListA @ stdcall SHGetPathFromIDListA(ptr ptr) @ stdcall SHGetPathFromIDListW(ptr ptr) @ stdcall SHGetSettings(ptr long) @@ -399,8 +399,8 @@ @ stub SHHelpShortcuts_RunDLLA @ stub SHHelpShortcuts_RunDLLW @ stdcall SHLoadInProc(long) -@ stub SHQueryRecycleBinA -@ stub SHQueryRecycleBinW +@ stdcall SHQueryRecycleBinA(str ptr) +@ stdcall SHQueryRecycleBinW(wstr ptr) @ stub SHUpdateRecycleBinIcon @ stub WOWShellExecute diff --git a/reactos/lib/shell32/shell32_Es.rc b/reactos/lib/shell32/shell32_Es.rc index 6a89f694378..151960dc720 100644 --- a/reactos/lib/shell32/shell32_Es.rc +++ b/reactos/lib/shell32/shell32_Es.rc @@ -188,3 +188,35 @@ STRINGTABLE DISCARDABLE IDS_SHUTDOWN_TITLE "Apagar" IDS_SHUTDOWN_PROMPT "¿Desea terminar su sesión ReactOS?" } + +/* shell folder path default values */ +STRINGTABLE DISCARDABLE +{ + IDS_PROGRAMS "Menú Inicio\\Programas" + IDS_PERSONAL "Mis documentos" + IDS_FAVORITES "Favoritos" + IDS_STARTUP "Menú Inicio\\Programas\\Inicio" + IDS_RECENT "Recent" + IDS_SENDTO "SendTo" + IDS_STARTMENU "Menú Inicio" + IDS_MYMUSIC "Mis documentos\\Mi música" + IDS_MYVIDEO "Mis documentos\\Mis vídeos" + IDS_DESKTOPDIRECTORY "Escritorio" + IDS_NETHOOD "Entorno de red" + IDS_TEMPLATES "Templates" + IDS_APPDATA "Application Data" + IDS_PRINTHOOD "PrintHood" + IDS_LOCAL_APPDATA "Configuración local\\Datos de programa" + IDS_INTERNET_CACHE "Archivos temporales de Internet" + IDS_COOKIES "Cookies" + IDS_HISTORY "Historial" + IDS_PROGRAM_FILES "Archivos de programa" + IDS_MYPICTURES "Mis documentos\\Mis imágenes" + IDS_PROGRAM_FILES_COMMON "Archivos de programa\\Archivos comunes" + IDS_COMMON_DOCUMENTS "Documentos" + IDS_ADMINTOOLS "Menú Inicio\\Programas\\Accesorios\\Herramientas del sistema" + IDS_COMMON_MUSIC "Documentos\\Mi música" + IDS_COMMON_PICTURES "Documentos\\Mis imágenes" + IDS_COMMON_VIDEO "Documentos\\Mis vídeos" + IDS_CDBURN_AREA "Configuración local\\Datos de programa\\Microsoft\\CD Burning" +} diff --git a/reactos/lib/shell32/shell32_main.c b/reactos/lib/shell32/shell32_main.c index 16ab3d116f1..ec19d72a62c 100644 --- a/reactos/lib/shell32/shell32_main.c +++ b/reactos/lib/shell32/shell32_main.c @@ -542,21 +542,6 @@ DWORD WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, return ret; } -/************************************************************************* - * SHGetFileInfo [SHELL32.@] - */ -DWORD WINAPI SHGetFileInfoAW( - LPCVOID path, - DWORD dwFileAttributes, - LPVOID psfi, - UINT sizeofpsfi, - UINT flags) -{ - if(SHELL_OsIsUnicode()) - return SHGetFileInfoW(path, dwFileAttributes, psfi, sizeofpsfi, flags ); - return SHGetFileInfoA(path, dwFileAttributes, psfi, sizeofpsfi, flags ); -} - /************************************************************************* * DuplicateIcon [SHELL32.@] */ @@ -827,8 +812,8 @@ BOOL WINAPI ShellAboutA( HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIc ret = ShellAboutW(hWnd, appW, otherW, hIcon); - if (otherW) HeapFree(GetProcessHeap(), 0, otherW); - if (appW) HeapFree(GetProcessHeap(), 0, appW); + HeapFree(GetProcessHeap(), 0, otherW); + HeapFree(GetProcessHeap(), 0, appW); return ret; } @@ -844,10 +829,12 @@ BOOL WINAPI ShellAboutW( HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HRSRC hRes; LPVOID template; BOOL bRet; + static const WCHAR wszSHELL_ABOUT_MSGBOX[] = + {'S','H','E','L','L','_','A','B','O','U','T','_','M','S','G','B','O','X',0}; TRACE("\n"); - if(!(hRes = FindResourceA(shell32_hInstance, "SHELL_ABOUT_MSGBOX", (LPSTR)RT_DIALOG))) + if(!(hRes = FindResourceW(shell32_hInstance, wszSHELL_ABOUT_MSGBOX, (LPWSTR)RT_DIALOG))) return FALSE; if(!(template = (LPVOID)LoadResource(shell32_hInstance, hRes))) return FALSE; diff --git a/reactos/lib/shell32/shelllink.c b/reactos/lib/shell32/shelllink.c index fef4152f3c6..759dd81a926 100644 --- a/reactos/lib/shell32/shelllink.c +++ b/reactos/lib/shell32/shelllink.c @@ -993,20 +993,11 @@ static ULONG WINAPI IShellLinkA_fnRelease(IShellLinkA * iface) TRACE("-- destroying IShellLink(%p)\n",This); - if (This->sIcoPath) - HeapFree(GetProcessHeap(), 0, This->sIcoPath); - - if (This->sArgs) - HeapFree(GetProcessHeap(), 0, This->sArgs); - - if (This->sWorkDir) - HeapFree(GetProcessHeap(), 0, This->sWorkDir); - - if (This->sDescription) - HeapFree(GetProcessHeap(), 0, This->sDescription); - - if (This->sPath) - HeapFree(GetProcessHeap(),0,This->sPath); + HeapFree(GetProcessHeap(), 0, This->sIcoPath); + HeapFree(GetProcessHeap(), 0, This->sArgs); + HeapFree(GetProcessHeap(), 0, This->sWorkDir); + HeapFree(GetProcessHeap(), 0, This->sDescription); + HeapFree(GetProcessHeap(),0,This->sPath); if (This->pPidl) ILFree(This->pPidl); @@ -1080,8 +1071,7 @@ static HRESULT WINAPI IShellLinkA_fnSetDescription(IShellLinkA * iface, LPCSTR p TRACE("(%p)->(pName=%s)\n", This, pszName); - if (This->sDescription) - HeapFree(GetProcessHeap(), 0, This->sDescription); + HeapFree(GetProcessHeap(), 0, This->sDescription); This->sDescription = HEAP_strdupAtoW( GetProcessHeap(), 0, pszName); if ( !This->sDescription ) return E_OUTOFMEMORY; @@ -1112,8 +1102,7 @@ static HRESULT WINAPI IShellLinkA_fnSetWorkingDirectory(IShellLinkA * iface, LPC TRACE("(%p)->(dir=%s)\n",This, pszDir); - if (This->sWorkDir) - HeapFree(GetProcessHeap(), 0, This->sWorkDir); + HeapFree(GetProcessHeap(), 0, This->sWorkDir); This->sWorkDir = HEAP_strdupAtoW( GetProcessHeap(), 0, pszDir); if ( !This->sWorkDir ) return E_OUTOFMEMORY; @@ -1144,8 +1133,7 @@ static HRESULT WINAPI IShellLinkA_fnSetArguments(IShellLinkA * iface, LPCSTR psz TRACE("(%p)->(args=%s)\n",This, pszArgs); - if (This->sArgs) - HeapFree(GetProcessHeap(), 0, This->sArgs); + HeapFree(GetProcessHeap(), 0, This->sArgs); This->sArgs = HEAP_strdupAtoW( GetProcessHeap(), 0, pszArgs); if( !This->sArgs ) return E_OUTOFMEMORY; @@ -1276,8 +1264,7 @@ static HRESULT WINAPI IShellLinkA_fnSetIconLocation(IShellLinkA * iface, LPCSTR TRACE("(%p)->(path=%s iicon=%u)\n",This, pszIconPath, iIcon); - if (This->sIcoPath) - HeapFree(GetProcessHeap(), 0, This->sIcoPath); + HeapFree(GetProcessHeap(), 0, This->sIcoPath); This->sIcoPath = HEAP_strdupAtoW(GetProcessHeap(), 0, pszIconPath); if ( !This->sIcoPath ) return E_OUTOFMEMORY; @@ -1294,8 +1281,7 @@ static HRESULT WINAPI IShellLinkA_fnSetRelativePath(IShellLinkA * iface, LPCSTR FIXME("(%p)->(path=%s %lx)\n",This, pszPathRel, dwReserved); - if (This->sPathRel) - HeapFree(GetProcessHeap(), 0, This->sPathRel); + HeapFree(GetProcessHeap(), 0, This->sPathRel); This->sPathRel = HEAP_strdupAtoW(GetProcessHeap(), 0, pszPathRel); This->bDirty = TRUE; @@ -1354,9 +1340,7 @@ static HRESULT WINAPI IShellLinkA_fnSetPath(IShellLinkA * iface, LPCSTR pszFile) if (!GetFullPathNameA(pszFile, MAX_PATH, buffer, &fname)) return E_FAIL; - if (This->sPath) - HeapFree(GetProcessHeap(), 0, This->sPath); - + HeapFree(GetProcessHeap(), 0, This->sPath); This->sPath = HEAP_strdupAtoW(GetProcessHeap(), 0, buffer); if( !This->sPath ) return E_OUTOFMEMORY; @@ -1499,8 +1483,7 @@ static HRESULT WINAPI IShellLinkW_fnSetDescription(IShellLinkW * iface, LPCWSTR TRACE("(%p)->(desc=%s)\n",This, debugstr_w(pszName)); - if (This->sDescription) - HeapFree(GetProcessHeap(), 0, This->sDescription); + HeapFree(GetProcessHeap(), 0, This->sDescription); This->sDescription = HeapAlloc( GetProcessHeap(), 0, (lstrlenW( pszName )+1)*sizeof(WCHAR) ); if ( !This->sDescription ) @@ -1532,8 +1515,7 @@ static HRESULT WINAPI IShellLinkW_fnSetWorkingDirectory(IShellLinkW * iface, LPC TRACE("(%p)->(dir=%s)\n",This, debugstr_w(pszDir)); - if (This->sWorkDir) - HeapFree(GetProcessHeap(), 0, This->sWorkDir); + HeapFree(GetProcessHeap(), 0, This->sWorkDir); This->sWorkDir = HeapAlloc( GetProcessHeap(), 0, (lstrlenW( pszDir )+1)*sizeof (WCHAR) ); if ( !This->sWorkDir ) @@ -1564,8 +1546,7 @@ static HRESULT WINAPI IShellLinkW_fnSetArguments(IShellLinkW * iface, LPCWSTR ps TRACE("(%p)->(args=%s)\n",This, debugstr_w(pszArgs)); - if (This->sArgs) - HeapFree(GetProcessHeap(), 0, This->sArgs); + HeapFree(GetProcessHeap(), 0, This->sArgs); This->sArgs = HeapAlloc( GetProcessHeap(), 0, (lstrlenW( pszArgs )+1)*sizeof (WCHAR) ); if ( !This->sArgs ) @@ -1697,8 +1678,7 @@ static HRESULT WINAPI IShellLinkW_fnSetIconLocation(IShellLinkW * iface, LPCWSTR TRACE("(%p)->(path=%s iicon=%u)\n",This, debugstr_w(pszIconPath), iIcon); - if (This->sIcoPath) - HeapFree(GetProcessHeap(), 0, This->sIcoPath); + HeapFree(GetProcessHeap(), 0, This->sIcoPath); This->sIcoPath = HeapAlloc( GetProcessHeap(), 0, (lstrlenW( pszIconPath )+1)*sizeof (WCHAR) ); if ( !This->sIcoPath ) @@ -1717,8 +1697,7 @@ static HRESULT WINAPI IShellLinkW_fnSetRelativePath(IShellLinkW * iface, LPCWSTR TRACE("(%p)->(path=%s %lx)\n",This, debugstr_w(pszPathRel), dwReserved); - if (This->sPathRel) - HeapFree(GetProcessHeap(), 0, This->sPathRel); + HeapFree(GetProcessHeap(), 0, This->sPathRel); This->sPathRel = HeapAlloc( GetProcessHeap(), 0, (lstrlenW( pszPathRel )+1) * sizeof (WCHAR) ); if ( !This->sPathRel ) @@ -1781,9 +1760,7 @@ static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile if (!GetFullPathNameW(pszFile, MAX_PATH, buffer, &fname)) return E_FAIL; - if (This->sPath) - HeapFree(GetProcessHeap(), 0, This->sPath); - + HeapFree(GetProcessHeap(), 0, This->sPath); This->sPath = HeapAlloc( GetProcessHeap(), 0, (lstrlenW( buffer )+1) * sizeof (WCHAR) ); if (!This->sPath) diff --git a/reactos/lib/shell32/shellole.c b/reactos/lib/shell32/shellole.c index c523ea6b53e..58bb9ab3566 100644 --- a/reactos/lib/shell32/shellole.c +++ b/reactos/lib/shell32/shellole.c @@ -704,7 +704,7 @@ UINT WINAPI DragQueryFileA( lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->pFiles; - if(lpDropFileStruct->fWide == TRUE) { + if(lpDropFileStruct->fWide) { LPWSTR lpszFileW = NULL; if(lpszFile) { diff --git a/reactos/lib/shell32/shellord.c b/reactos/lib/shell32/shellord.c index 87ded76318f..71b7714fceb 100644 --- a/reactos/lib/shell32/shellord.c +++ b/reactos/lib/shell32/shellord.c @@ -1546,5 +1546,90 @@ BOOL WINAPI SHFindFiles( LPCITEMIDLIST pidlFolder, LPCITEMIDLIST pidlSaveFile ) */ void WINAPI SHUpdateImageW(LPCWSTR pszHashItem, int iIndex, UINT uFlags, int iImageIndex) { - FIXME("%s, %d, 0x%x, %d\n", debugstr_w(pszHashItem), iIndex, uFlags, iImageIndex); + FIXME("%s, %d, 0x%x, %d - stub\n", debugstr_w(pszHashItem), iIndex, uFlags, iImageIndex); +} + +VOID WINAPI SHUpdateImageA(LPCSTR pszHashItem, INT iIndex, UINT uFlags, INT iImageIndex) +{ + FIXME("%s, %d, 0x%x, %d - stub\n", debugstr_a(pszHashItem), iIndex, uFlags, iImageIndex); +} + +INT WINAPI SHHandleUpdateImage(LPCITEMIDLIST pidlExtra) +{ + FIXME("%p - stub\n", pidlExtra); + + return -1; +} + +BOOL WINAPI SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR szObject, LPCWSTR szPage) +{ + FIXME("%p, 0x%08lx, %s, %s - stub\n", hwnd, dwType, debugstr_w(szObject), debugstr_w(szPage)); + + return TRUE; +} + +BOOL WINAPI SHGetNewLinkInfoA(LPCSTR pszLinkTo, LPCSTR pszDir, LPSTR pszName, BOOL *pfMustCopy, + UINT uFlags) +{ + FIXME("%s, %s, %p, %p, 0x%08x - stub\n", debugstr_a(pszLinkTo), debugstr_a(pszDir), + pszName, pfMustCopy, uFlags); + + return FALSE; +} + +BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, BOOL *pfMustCopy, + UINT uFlags) +{ + FIXME("%s, %s, %p, %p, 0x%08x - stub\n", debugstr_w(pszLinkTo), debugstr_w(pszDir), + pszName, pfMustCopy, uFlags); + + return FALSE; +} + +HRESULT WINAPI SHStartNetConnectionDialog(HWND hwnd, LPCSTR pszRemoteName, DWORD dwType) +{ + FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_a(pszRemoteName), dwType); + + return S_OK; +} + +HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags) +{ + FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_a(pszRootPath), dwFlags); + + return S_OK; +} + +HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) +{ + FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_w(pszRootPath), dwFlags); + + return S_OK; +} + +DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options) +{ + FIXME("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options); + + return SHFMT_NOFORMAT; +} + +HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) +{ + FIXME("%s, %p - stub\n", debugstr_a(pszRootPath), pSHQueryRBInfo); + + pSHQueryRBInfo->i64Size = 0; + pSHQueryRBInfo->i64NumItems = 0; + + return S_OK; +} + +HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) +{ + FIXME("%s, %p - stub\n", debugstr_w(pszRootPath), pSHQueryRBInfo); + + pSHQueryRBInfo->i64Size = 0; + pSHQueryRBInfo->i64NumItems = 0; + + return S_OK; } diff --git a/reactos/lib/shell32/shellreg.c b/reactos/lib/shell32/shellreg.c index 0fe7eb4b8be..5cef4274b75 100644 --- a/reactos/lib/shell32/shellreg.c +++ b/reactos/lib/shell32/shellreg.c @@ -36,7 +36,6 @@ #include "undocshell.h" #include "wine/winbase16.h" -#include "shell32_main.h" #include "wine/debug.h" diff --git a/reactos/lib/shell32/shfldr_mycomp.c b/reactos/lib/shell32/shfldr_mycomp.c index 994514c55e9..21ad1017569 100644 --- a/reactos/lib/shell32/shfldr_mycomp.c +++ b/reactos/lib/shell32/shfldr_mycomp.c @@ -45,7 +45,6 @@ #include "shell32_main.h" #include "shresdef.h" #include "shlwapi.h" -#include "shellfolder.h" #include "wine/debug.h" #include "debughlp.h" #include "shfldr.h" diff --git a/reactos/lib/shell32/shlexec.c b/reactos/lib/shell32/shlexec.c index 9ea332195e3..d1a251dbf29 100644 --- a/reactos/lib/shell32/shlexec.c +++ b/reactos/lib/shell32/shlexec.c @@ -38,17 +38,12 @@ #include "winbase.h" #include "winerror.h" #include "winreg.h" -#include "wownt32.h" -#include "shellapi.h" -#include "wingdi.h" #include "winuser.h" -#include "shlobj.h" #include "shlwapi.h" #include "ddeml.h" #include "wine/winbase16.h" #include "shell32_main.h" -#include "undocshell.h" #include "pidl.h" #include "wine/debug.h" @@ -1284,7 +1279,7 @@ BOOL WINAPI ShellExecuteExW32 (LPSHELLEXECUTEINFOW sei, SHELL_ExecuteW32 execfun retval = execute_from_key(lpstrProtocol, wszApplicationName, env, sei_tmp.lpParameters, execfunc, &sei_tmp, sei); else retval = execfunc(wszQuotedCmd, env, FALSE, &sei_tmp, sei); - if (env) HeapFree( GetProcessHeap(), 0, env ); + HeapFree( GetProcessHeap(), 0, env ); } else if (PathIsURLW((LPWSTR)lpFile)) /* File not found, check for URL */ { @@ -1368,17 +1363,6 @@ HINSTANCE WINAPI ShellExecuteA(HWND hWnd, LPCSTR lpOperation,LPCSTR lpFile, return sei.hInstApp; } -/************************************************************************* - * ShellExecuteEx [SHELL32.291] - * - */ -BOOL WINAPI ShellExecuteExAW (LPVOID sei) -{ - if (SHELL_OsIsUnicode()) - return ShellExecuteExW32 (sei, SHELL_ExecuteW); - return ShellExecuteExA (sei); -} - /************************************************************************* * ShellExecuteExA [SHELL32.292] * diff --git a/reactos/lib/shell32/shlfileop.c b/reactos/lib/shell32/shlfileop.c index 814fce00f48..cce85e6e55b 100644 --- a/reactos/lib/shell32/shlfileop.c +++ b/reactos/lib/shell32/shlfileop.c @@ -1335,8 +1335,7 @@ shfileop_end: if (hFind != INVALID_HANDLE_VALUE) FindClose(hFind); hFind = INVALID_HANDLE_VALUE; - if (pTempFrom) - HeapFree(GetProcessHeap(), 0, pTempFrom); + HeapFree(GetProcessHeap(), 0, pTempFrom); if (retCode) nFileOp.fAnyOperationsAborted = TRUE; TRACE("%s level=%ld AnyOpsAborted=%s ret=0x%x, with %s %s%s\n", @@ -1348,17 +1347,6 @@ shfileop_end: return retCode; } -/************************************************************************* - * SHFileOperation [SHELL32.@] - * - */ -DWORD WINAPI SHFileOperationAW(LPVOID lpFileOp) -{ - if (SHELL_OsIsUnicode()) - return SHFileOperationW(lpFileOp); - return SHFileOperationA(lpFileOp); -} - #define SHDSA_GetItemCount(hdsa) (*(int*)(hdsa)) /************************************************************************* diff --git a/reactos/lib/shell32/shlfolder.c b/reactos/lib/shell32/shlfolder.c index 3394155fdbb..6ef820e7d73 100644 --- a/reactos/lib/shell32/shlfolder.c +++ b/reactos/lib/shell32/shlfolder.c @@ -45,11 +45,8 @@ #include "pidl.h" #include "undocshell.h" #include "shell32_main.h" -#include "shresdef.h" #include "shlwapi.h" -#include "shellfolder.h" #include "wine/debug.h" -#include "debughlp.h" #include "shfldr.h" WINE_DEFAULT_DEBUG_CHANNEL (shell); diff --git a/reactos/lib/shell32/shlfsbind.c b/reactos/lib/shell32/shlfsbind.c index cbf09d420fc..4497509cab4 100644 --- a/reactos/lib/shell32/shlfsbind.c +++ b/reactos/lib/shell32/shlfsbind.c @@ -33,7 +33,6 @@ #include "shlobj.h" #include "shell32_main.h" -#include "debughlp.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(pidl); diff --git a/reactos/lib/shell32/shlview.c b/reactos/lib/shell32/shlview.c index b504b75d9cc..e5bac11c710 100644 --- a/reactos/lib/shell32/shlview.c +++ b/reactos/lib/shell32/shlview.c @@ -1380,7 +1380,6 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn } return TRUE; } - break; case LVN_ENDLABELEDITA: { @@ -1411,7 +1410,6 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn } return FALSE; } - break; case LVN_KEYDOWN: { @@ -1822,7 +1820,7 @@ static HRESULT WINAPI IShellView_fnCreateViewWindow( { ZeroMemory(&wc, sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = (WNDPROC) ShellView_WndProc; + wc.lpfnWndProc = ShellView_WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = shell32_hInstance; diff --git a/reactos/lib/shell32/systray.c b/reactos/lib/shell32/systray.c index b371cd87782..fc93114a625 100644 --- a/reactos/lib/shell32/systray.c +++ b/reactos/lib/shell32/systray.c @@ -162,7 +162,7 @@ BOOL SYSTRAY_RegisterClass(void) WNDCLASSA wc; wc.style = CS_SAVEBITS|CS_DBLCLKS; - wc.lpfnWndProc = (WNDPROC)SYSTRAY_WndProc; + wc.lpfnWndProc = SYSTRAY_WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = 0; diff --git a/reactos/lib/shell32/undocshell.h b/reactos/lib/shell32/undocshell.h index 42edd1427f5..e111a31361e 100644 --- a/reactos/lib/shell32/undocshell.h +++ b/reactos/lib/shell32/undocshell.h @@ -559,7 +559,7 @@ HRESULT WINAPI SHCreateDefClassObject( LPDWORD lpdwUsage, REFIID riidObject); -void WINAPI SHFreeUnusedLibraries(); +void WINAPI SHFreeUnusedLibraries(void); /* SHCreateLinks flags */ #define SHCLF_PREFIXNAME 0x01 diff --git a/reactos/lib/shell32/version.h b/reactos/lib/shell32/version.h index 7ac3ee70761..7106af344d2 100644 --- a/reactos/lib/shell32/version.h +++ b/reactos/lib/shell32/version.h @@ -18,11 +18,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#define WINE_FILEVERSION_MAJOR 6 +#define WINE_FILEVERSION_MAJOR 5 #define WINE_FILEVERSION_MINOR 0 -#define WINE_FILEVERSION_BUILD 2600 -#define WINE_FILEVERSION_PLATFORMID 1 +#define WINE_FILEVERSION_BUILD 3900 +#define WINE_FILEVERSION_PLATFORMID 6975 /* FIXME: when libs/wpp gets fixed to support concatenation we can remove * this and define it in version.rc */ -#define WINE_FILEVERSION "6.0.2600.1" +#define WINE_FILEVERSION "5.0.3900.6975"