Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comdlg32/filedlg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c index a882f80417..81f7449d46 100644 --- a/dlls/comdlg32/filedlg.c +++ b/dlls/comdlg32/filedlg.c @@ -1443,13 +1443,13 @@ static LRESULT FILEDLG95_InitControls(HWND hwnd)
if (fodInfos->unicode) fodInfos->DlgInfos.hwndTB = CreateWindowExW(0, TOOLBARCLASSNAMEW, NULL, - WS_CHILD | WS_GROUP | WS_VISIBLE | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | CCS_NODIVIDER | CCS_NORESIZE, + WS_CHILD | WS_GROUP | WS_VISIBLE | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | CCS_NODIVIDER | CCS_NORESIZE, rectTB.left, rectTB.top, rectTB.right - rectTB.left, rectTB.bottom - rectTB.top, hwnd, (HMENU)IDC_TOOLBAR, COMDLG32_hInstance, NULL); else fodInfos->DlgInfos.hwndTB = CreateWindowExA(0, TOOLBARCLASSNAMEA, NULL, - WS_CHILD | WS_GROUP | WS_VISIBLE | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | CCS_NODIVIDER | CCS_NORESIZE, + WS_CHILD | WS_GROUP | WS_VISIBLE | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | CCS_NODIVIDER | CCS_NORESIZE, rectTB.left, rectTB.top, rectTB.right - rectTB.left, rectTB.bottom - rectTB.top, hwnd, (HMENU)IDC_TOOLBAR, COMDLG32_hInstance, NULL);
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comdlg32/filedlg.c | 191 +++++++++++++++++++++++++++++++---------- dlls/comdlg32/filedlgbrowser.h | 1 + 2 files changed, 149 insertions(+), 43 deletions(-)
diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c index 81f7449d46..13226e0cec 100644 --- a/dlls/comdlg32/filedlg.c +++ b/dlls/comdlg32/filedlg.c @@ -121,9 +121,11 @@ typedef struct tagLookInInfo /* Undefined windows message sent by CreateViewObject*/ #define WM_GETISHELLBROWSER WM_USER+7
-#define TBPLACES_CMDID_DESKTOP 0xa065 -#define TBPLACES_CMDID_MYDOCS 0xa066 -#define TBPLACES_CMDID_MYCOMPUTER 0xa067 +#define TBPLACES_CMDID_PLACE0 0xa064 +#define TBPLACES_CMDID_PLACE1 0xa065 +#define TBPLACES_CMDID_PLACE2 0xa066 +#define TBPLACES_CMDID_PLACE3 0xa067 +#define TBPLACES_CMDID_PLACE4 0xa068
/* NOTE * Those macros exist in windowsx.h. However, you can't really use them since @@ -214,11 +216,117 @@ static INT_PTR FILEDLG95_HandleCustomDialogMessages(HWND hwnd, UINT uMsg, WPARAM static BOOL FILEDLG95_OnOpenMultipleFiles(HWND hwnd, LPWSTR lpstrFileList, UINT nFileCount, UINT sizeUsed); static BOOL BrowseSelectedFolder(HWND hwnd);
+static BOOL get_config_key_as_dword(HKEY hkey, const WCHAR *name, DWORD *value) +{ + DWORD type, data, size; + + size = sizeof(data); + if (hkey && !RegQueryValueExW(hkey, name, 0, &type, (BYTE *)&data, &size)) + { + *value = data; + return TRUE; + } + + return FALSE; +} + +static BOOL get_config_key_dword(HKEY hkey, const WCHAR *name, DWORD *value) +{ + DWORD type, data, size; + + size = sizeof(data); + if (hkey && !RegQueryValueExW(hkey, name, 0, &type, (BYTE *)&data, &size) && type == REG_DWORD) + { + *value = data; + return TRUE; + } + + return FALSE; +} + +static BOOL get_config_key_string(HKEY hkey, const WCHAR *name, WCHAR **value) +{ + DWORD type, size; + WCHAR *str; + + if (hkey && !RegQueryValueExW(hkey, name, 0, &type, NULL, &size)) + { + if (type != REG_SZ && type != REG_EXPAND_SZ) + return FALSE; + } + + str = heap_alloc(size); + if (RegQueryValueExW(hkey, name, 0, &type, (BYTE *)str, &size)) + { + heap_free(str); + return FALSE; + } + + *value = str; + return TRUE; +} + static BOOL is_places_bar_enabled(const FileOpenDlgInfos *fodInfos) { - return (fodInfos->ofnInfos->lStructSize == sizeof(*fodInfos->ofnInfos) && - !(fodInfos->ofnInfos->FlagsEx & OFN_EX_NOPLACESBAR) && - (fodInfos->ofnInfos->Flags & OFN_EXPLORER)); + static const WCHAR noplacesbarW[] = {'N','o','P','l','a','c','e','s','B','a','r',0}; + DWORD value; + HKEY hkey; + + if (fodInfos->ofnInfos->lStructSize != sizeof(*fodInfos->ofnInfos) || + (fodInfos->ofnInfos->FlagsEx & OFN_EX_NOPLACESBAR) || + !(fodInfos->ofnInfos->Flags & OFN_EXPLORER)) + { + return FALSE; + } + + if (RegOpenKeyA(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Comdlg32", &hkey)) + return TRUE; + + value = 0; + get_config_key_as_dword(hkey, noplacesbarW, &value); + RegCloseKey(hkey); + return value == 0; +} + +static void filedlg_collect_places_pidls(FileOpenDlgInfos *fodInfos) +{ + static const int default_places[] = + { + CSIDL_DESKTOP, + CSIDL_MYDOCUMENTS, + CSIDL_DRIVES, + }; + unsigned int i; + HKEY hkey; + + if (!RegOpenKeyA(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\Comdlg32\Placesbar", + &hkey)) + { + for (i = 0; i < ARRAY_SIZE(fodInfos->places); i++) + { + static const WCHAR placeW[] = {'P','l','a','c','e','%','d',0}; + WCHAR nameW[8]; + DWORD value; + WCHAR *str; + + sprintfW(nameW, placeW, i); + if (get_config_key_dword(hkey, nameW, &value)) + SHGetSpecialFolderLocation(NULL, value, &fodInfos->places[i]); + else if (get_config_key_string(hkey, nameW, &str)) + { + SHParseDisplayName(str, NULL, &fodInfos->places[i], 0, NULL); + heap_free(str); + } + } + + /* FIXME: eliminate duplicates. */ + + RegCloseKey(hkey); + return; + } + + for (i = 0; i < ARRAY_SIZE(default_places); i++) + SHGetSpecialFolderLocation(NULL, default_places[i], &fodInfos->places[i]); }
/*********************************************************************** @@ -434,6 +542,7 @@ static void init_filedlg_infoA(OPENFILENAMEA *ofn, FileOpenDlgInfos *info) static BOOL GetFileDialog95(FileOpenDlgInfos *info, UINT dlg_type) { WCHAR *current_dir = NULL; + unsigned int i; BOOL ret;
/* save current directory */ @@ -472,6 +581,10 @@ static BOOL GetFileDialog95(FileOpenDlgInfos *info, UINT dlg_type)
heap_free(info->filename); heap_free(info->initdir); + + for (i = 0; i < ARRAY_SIZE(info->places); i++) + ILFree(info->places[i]); + return ret; }
@@ -1477,17 +1590,6 @@ static LRESULT FILEDLG95_InitControls(HWND hwnd)
if (is_places_bar_enabled(fodInfos)) { - static const struct bar_place_descr - { - int csidl; - int cmdid; - } - default_places[] = - { - { CSIDL_DESKTOP, TBPLACES_CMDID_DESKTOP }, - { CSIDL_MYDOCUMENTS, TBPLACES_CMDID_MYDOCS }, - { CSIDL_DRIVES, TBPLACES_CMDID_MYCOMPUTER }, - }; TBBUTTON tb = { 0 }; HIMAGELIST himl; RECT rect; @@ -1498,26 +1600,28 @@ static LRESULT FILEDLG95_InitControls(HWND hwnd) cx = rect.right - rect.left;
SendDlgItemMessageW(hwnd, IDC_TOOLBARPLACES, TB_SETBUTTONWIDTH, 0, MAKELPARAM(cx, cx)); - himl = ImageList_Create(GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), ILC_COLOR32, 4, 1); - for (i = 0; i < sizeof(default_places)/sizeof(default_places[0]); i++) + + filedlg_collect_places_pidls(fodInfos); + for (i = 0; i < ARRAY_SIZE(fodInfos->places); i++) { - ITEMIDLIST *pidl; + int index; + + if (!fodInfos->places[i]) + continue;
- SHGetSpecialFolderLocation(NULL, default_places[i].csidl, &pidl); memset(&fileinfo, 0, sizeof(fileinfo)); - SHGetFileInfoW((const WCHAR *)pidl, 0, &fileinfo, sizeof(fileinfo), + SHGetFileInfoW((const WCHAR *)fodInfos->places[i], 0, &fileinfo, sizeof(fileinfo), SHGFI_PIDL | SHGFI_DISPLAYNAME | SHGFI_ICON); - ImageList_AddIcon(himl, fileinfo.hIcon); + index = ImageList_AddIcon(himl, fileinfo.hIcon);
- tb.iBitmap = i; + tb.iBitmap = index; tb.iString = (INT_PTR)fileinfo.szDisplayName; tb.fsState = TBSTATE_ENABLED | TBSTATE_WRAP; - tb.idCommand = default_places[i].cmdid; + tb.idCommand = TBPLACES_CMDID_PLACE0 + i; SendDlgItemMessageW(hwnd, IDC_TOOLBARPLACES, TB_ADDBUTTONSW, 1, (LPARAM)&tb);
DestroyIcon(fileinfo.hIcon); - CoTaskMemFree(pidl); }
SendDlgItemMessageW(hwnd, IDC_TOOLBARPLACES, TB_SETIMAGELIST, 0, (LPARAM)himl); @@ -1869,20 +1973,15 @@ void FILEDLG95_Clean(HWND hwnd)
/*********************************************************************** - * Browse to special folder + * Browse to arbitrary pidl */ -static void filedlg_browse_to_specialfolder(const FileOpenDlgInfos *info, int csidl) +static void filedlg_browse_to_pidl(const FileOpenDlgInfos *info, LPITEMIDLIST pidl) { - LPITEMIDLIST pidl; - - TRACE("%p, %d\n", info->ShellInfos.hwndOwner, csidl); + TRACE("%p, %p\n", info->ShellInfos.hwndOwner, pidl);
- SHGetSpecialFolderLocation(0, csidl, &pidl); IShellBrowser_BrowseObject(info->Shell.FOIShellBrowser, pidl, SBSP_ABSOLUTE); if (info->ofnInfos->Flags & OFN_EXPLORER) SendCustomDlgNotificationMessage(info->ShellInfos.hwndOwner, CDN_FOLDERCHANGE); - - COMDLG32_SHFree(pidl); }
/*********************************************************************** @@ -1894,9 +1993,9 @@ static LRESULT FILEDLG95_OnWMCommand(HWND hwnd, WPARAM wParam) { FileOpenDlgInfos *fodInfos = get_filedlg_infoptr(hwnd); WORD wNotifyCode = HIWORD(wParam); /* notification code */ - WORD wID = LOWORD(wParam); /* item, control, or accelerator identifier */ + WORD id = LOWORD(wParam); /* item, control, or accelerator identifier */
- switch(wID) + switch (id) { /* OK button */ case IDOK: @@ -1935,16 +2034,22 @@ static LRESULT FILEDLG95_OnWMCommand(HWND hwnd, WPARAM wParam) break;
case FCIDM_TB_DESKTOP: - case TBPLACES_CMDID_DESKTOP: - filedlg_browse_to_specialfolder(fodInfos, CSIDL_DESKTOP); - break; + { + LPITEMIDLIST pidl;
- case TBPLACES_CMDID_MYDOCS: - filedlg_browse_to_specialfolder(fodInfos, CSIDL_MYDOCUMENTS); + SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, &pidl); + filedlg_browse_to_pidl(fodInfos, pidl); + COMDLG32_SHFree(pidl); break; + }
- case TBPLACES_CMDID_MYCOMPUTER: - filedlg_browse_to_specialfolder(fodInfos, CSIDL_DRIVES); + /* Places bar */ + case TBPLACES_CMDID_PLACE0: + case TBPLACES_CMDID_PLACE1: + case TBPLACES_CMDID_PLACE2: + case TBPLACES_CMDID_PLACE3: + case TBPLACES_CMDID_PLACE4: + filedlg_browse_to_pidl(fodInfos, fodInfos->places[id - TBPLACES_CMDID_PLACE0]); break;
case edt1: diff --git a/dlls/comdlg32/filedlgbrowser.h b/dlls/comdlg32/filedlgbrowser.h index 69790e9a75..21eb3d56df 100644 --- a/dlls/comdlg32/filedlgbrowser.h +++ b/dlls/comdlg32/filedlgbrowser.h @@ -93,6 +93,7 @@ typedef struct } HookMsg;
BOOL ole_initialized; + LPITEMIDLIST places[5]; } FileOpenDlgInfos;
/***********************************************************************
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comdlg32/cdlg.h | 12 ------- dlls/comdlg32/cdlg32.c | 32 ----------------- dlls/comdlg32/filedlg.c | 79 +++++++++++++++++++++--------------------- dlls/comdlg32/filedlgbrowser.c | 24 ++++++------- 4 files changed, 50 insertions(+), 97 deletions(-)
diff --git a/dlls/comdlg32/cdlg.h b/dlls/comdlg32/cdlg.h index be0a298e13..eebf1a9b2b 100644 --- a/dlls/comdlg32/cdlg.h +++ b/dlls/comdlg32/cdlg.h @@ -206,19 +206,7 @@ void FILEDLG95_OnOpenMessage(HWND hwnd, int idCaption, int idText) DECLSPEC_HIDD extern BOOL GetFileName31A( OPENFILENAMEA *lpofn, UINT dlgType ) DECLSPEC_HIDDEN; extern BOOL GetFileName31W( OPENFILENAMEW *lpofn, UINT dlgType ) DECLSPEC_HIDDEN;
-/* ITEMIDLIST */ - -extern LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILClone) (LPCITEMIDLIST); -extern LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILCombine)(LPCITEMIDLIST,LPCITEMIDLIST); -extern LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILGetNext)(LPITEMIDLIST); -extern BOOL (WINAPI *COMDLG32_PIDL_ILRemoveLastID)(LPCITEMIDLIST); -extern BOOL (WINAPI *COMDLG32_PIDL_ILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST); -extern UINT (WINAPI *COMDLG32_PIDL_ILGetSize)(LPCITEMIDLIST); - /* SHELL */ -extern LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD); -extern DWORD (WINAPI *COMDLG32_SHFree)(LPVOID); -extern BOOL (WINAPI *COMDLG32_SHGetFolderPathW)(HWND,int,HANDLE,DWORD,LPWSTR); extern LPITEMIDLIST (WINAPI *COMDLG32_SHSimpleIDListFromPathAW)(LPCVOID);
#define ONOPEN_BROWSE 1 diff --git a/dlls/comdlg32/cdlg32.c b/dlls/comdlg32/cdlg32.c index a00da2dda7..9997094ff0 100644 --- a/dlls/comdlg32/cdlg32.c +++ b/dlls/comdlg32/cdlg32.c @@ -44,20 +44,8 @@ DECLSPEC_HIDDEN HINSTANCE COMDLG32_hInstance = 0; static DWORD COMDLG32_TlsIndex = TLS_OUT_OF_INDEXES;
static HINSTANCE SHELL32_hInstance; -static HINSTANCE SHFOLDER_hInstance; - -/* ITEMIDLIST */ -LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILClone) (LPCITEMIDLIST) DECLSPEC_HIDDEN; -LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILCombine)(LPCITEMIDLIST,LPCITEMIDLIST) DECLSPEC_HIDDEN; -LPITEMIDLIST (WINAPI *COMDLG32_PIDL_ILGetNext)(LPITEMIDLIST) DECLSPEC_HIDDEN; -BOOL (WINAPI *COMDLG32_PIDL_ILRemoveLastID)(LPCITEMIDLIST) DECLSPEC_HIDDEN; -BOOL (WINAPI *COMDLG32_PIDL_ILIsEqual)(LPCITEMIDLIST, LPCITEMIDLIST) DECLSPEC_HIDDEN; -UINT (WINAPI *COMDLG32_PIDL_ILGetSize)(LPCITEMIDLIST) DECLSPEC_HIDDEN;
/* SHELL */ -LPVOID (WINAPI *COMDLG32_SHAlloc)(DWORD) DECLSPEC_HIDDEN; -DWORD (WINAPI *COMDLG32_SHFree)(LPVOID) DECLSPEC_HIDDEN; -BOOL (WINAPI *COMDLG32_SHGetFolderPathW)(HWND,int,HANDLE,DWORD,LPWSTR) DECLSPEC_HIDDEN; LPITEMIDLIST (WINAPI *COMDLG32_SHSimpleIDListFromPathAW)(LPCVOID) DECLSPEC_HIDDEN;
/*********************************************************************** @@ -89,33 +77,13 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD Reason, LPVOID Reserved)
SHELL32_hInstance = GetModuleHandleA("SHELL32.DLL");
- /* ITEMIDLIST */ - GPA(COMDLG32_PIDL_ILIsEqual, SHELL32_hInstance, (LPCSTR)21L); - GPA(COMDLG32_PIDL_ILCombine, SHELL32_hInstance, (LPCSTR)25L); - GPA(COMDLG32_PIDL_ILGetNext, SHELL32_hInstance, (LPCSTR)153L); - GPA(COMDLG32_PIDL_ILClone, SHELL32_hInstance, (LPCSTR)18L); - GPA(COMDLG32_PIDL_ILRemoveLastID, SHELL32_hInstance, (LPCSTR)17L); - GPA(COMDLG32_PIDL_ILGetSize, SHELL32_hInstance, (LPCSTR)152L); - /* SHELL */ GPA(COMDLG32_SHSimpleIDListFromPathAW, SHELL32_hInstance, (LPCSTR)162); - GPA(COMDLG32_SHAlloc, SHELL32_hInstance, (LPCSTR)196L); - GPA(COMDLG32_SHFree, SHELL32_hInstance, (LPCSTR)195L); - - /* for the first versions of shell32 SHGetFolderPathW is in SHFOLDER.DLL */ - COMDLG32_SHGetFolderPathW = (void*)GetProcAddress(SHELL32_hInstance,"SHGetFolderPathW"); - if (!COMDLG32_SHGetFolderPathW) - { - SHFOLDER_hInstance = LoadLibraryA("SHFOLDER.DLL"); - GPA(COMDLG32_SHGetFolderPathW, SHFOLDER_hInstance,"SHGetFolderPathW"); - } - break;
case DLL_PROCESS_DETACH: if (Reserved) break; if (COMDLG32_TlsIndex != TLS_OUT_OF_INDEXES) TlsFree(COMDLG32_TlsIndex); - if(SHFOLDER_hInstance) FreeLibrary(SHFOLDER_hInstance); break; } return TRUE; diff --git a/dlls/comdlg32/filedlg.c b/dlls/comdlg32/filedlg.c index 13226e0cec..fa3832cd6f 100644 --- a/dlls/comdlg32/filedlg.c +++ b/dlls/comdlg32/filedlg.c @@ -1048,7 +1048,7 @@ static INT_PTR FILEDLG95_HandleCustomDialogMessages(HWND hwnd, UINT uMsg, WPARAM break;
case CDM_GETFOLDERIDLIST: - retval = COMDLG32_PIDL_ILGetSize(fodInfos->ShellInfos.pidlAbsCurrent); + retval = ILGetSize(fodInfos->ShellInfos.pidlAbsCurrent); if (retval <= wParam) memcpy((void*)lParam, fodInfos->ShellInfos.pidlAbsCurrent, retval); break; @@ -1806,19 +1806,20 @@ static LRESULT FILEDLG95_InitControls(HWND hwnd) if (!handledPath && (win2000plus || win98plus)) { fodInfos->initdir = heap_alloc(MAX_PATH * sizeof(WCHAR));
- if(!COMDLG32_SHGetFolderPathW(hwnd, CSIDL_PERSONAL, 0, 0, fodInfos->initdir)) + if (SHGetFolderPathW(hwnd, CSIDL_PERSONAL, 0, 0, fodInfos->initdir) == S_OK) { - if(!COMDLG32_SHGetFolderPathW(hwnd, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, 0, 0, fodInfos->initdir)) - { - /* last fallback */ - GetCurrentDirectoryW(MAX_PATH, fodInfos->initdir); - TRACE("No personal or desktop dir, using cwd as failsafe: %s\n", debugstr_w(fodInfos->initdir)); - } else { + if (SHGetFolderPathW(hwnd, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, 0, 0, fodInfos->initdir) == S_OK) + { + /* last fallback */ + GetCurrentDirectoryW(MAX_PATH, fodInfos->initdir); + TRACE("No personal or desktop dir, using cwd as failsafe: %s\n", debugstr_w(fodInfos->initdir)); + } + else TRACE("No personal dir, using desktop instead: %s\n", debugstr_w(fodInfos->initdir)); - } - } else { - TRACE("No initial dir specified, using personal files dir of %s\n", debugstr_w(fodInfos->initdir)); } + else + TRACE("No initial dir specified, using personal files dir of %s\n", debugstr_w(fodInfos->initdir)); + handledPath = TRUE; } else if (!handledPath) { fodInfos->initdir = heap_alloc(MAX_PATH * sizeof(WCHAR)); @@ -1954,8 +1955,7 @@ static LRESULT FILEDLG95_FillControls(HWND hwnd, WPARAM wParam, LPARAM lParam) /* Browse to the initial directory */ IShellBrowser_BrowseObject(fodInfos->Shell.FOIShellBrowser,pidlItemId, SBSP_ABSOLUTE);
- /* Free pidlItem memory */ - COMDLG32_SHFree(pidlItemId); + ILFree(pidlItemId);
return TRUE; } @@ -2039,7 +2039,7 @@ static LRESULT FILEDLG95_OnWMCommand(HWND hwnd, WPARAM wParam)
SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, &pidl); filedlg_browse_to_pidl(fodInfos, pidl); - COMDLG32_SHFree(pidl); + ILFree(pidl); break; }
@@ -2179,7 +2179,7 @@ BOOL FILEDLG95_OnOpenMultipleFiles(HWND hwnd, LPWSTR lpstrFileList, UINT nFileCo
/* move to the next file in the list of files */ lpstrTemp += lstrlenW(lpstrTemp) + 1; - COMDLG32_SHFree(pidl); + ILFree(pidl); } }
@@ -2510,7 +2510,7 @@ int FILEDLG95_ValidatePathAction(LPWSTR lpstrPathAndFile, IShellFolder **ppsf, nOpenAction = ONOPEN_OPEN; break; } - COMDLG32_SHFree(pidl); + ILFree(pidl); pidl = NULL; } else if (!(flags & OFN_NOVALIDATE)) @@ -2542,7 +2542,7 @@ int FILEDLG95_ValidatePathAction(LPWSTR lpstrPathAndFile, IShellFolder **ppsf, break; } } - if(pidl) COMDLG32_SHFree(pidl); + ILFree(pidl);
return nOpenAction; } @@ -2661,7 +2661,7 @@ BOOL FILEDLG95_OnOpen(HWND hwnd) LPITEMIDLIST pidlCurrent; IPersistFolder2_GetCurFolder(ppf2, &pidlCurrent); IPersistFolder2_Release(ppf2); - if( ! COMDLG32_PIDL_ILIsEqual(pidlCurrent, fodInfos->ShellInfos.pidlAbsCurrent)) + if (!ILIsEqual(pidlCurrent, fodInfos->ShellInfos.pidlAbsCurrent)) { if (SUCCEEDED(IShellBrowser_BrowseObject(fodInfos->Shell.FOIShellBrowser, pidlCurrent, SBSP_ABSOLUTE)) && fodInfos->ofnInfos->Flags & OFN_EXPLORER) @@ -2675,7 +2675,7 @@ BOOL FILEDLG95_OnOpen(HWND hwnd) if (fodInfos->Shell.FOIShellView) IShellView_Refresh(fodInfos->Shell.FOIShellView); } - COMDLG32_SHFree(pidlCurrent); + ILFree(pidlCurrent); if (filename_is_edit( fodInfos )) SendMessageW(fodInfos->DlgInfos.hwndFileName, EM_SETSEL, 0, -1); else @@ -3033,7 +3033,7 @@ static void FILEDLG95_SHELL_Clean(HWND hwnd)
TRACE("\n");
- COMDLG32_SHFree(fodInfos->ShellInfos.pidlAbsCurrent); + ILFree(fodInfos->ShellInfos.pidlAbsCurrent);
/* clean Shell interfaces */ if (fodInfos->Shell.FOIShellView) @@ -3317,7 +3317,7 @@ static void FILEDLG95_LOOKIN_Init(HWND hwndCombo) /* Initialise data of Desktop folder */ SHGetSpecialFolderLocation(0,CSIDL_DESKTOP,&pidlTmp); FILEDLG95_LOOKIN_AddItem(hwndCombo, pidlTmp,LISTEND); - COMDLG32_SHFree(pidlTmp); + ILFree(pidlTmp);
SHGetSpecialFolderLocation(0,CSIDL_DRIVES,&pidlDrives);
@@ -3336,7 +3336,7 @@ static void FILEDLG95_LOOKIN_Init(HWND hwndCombo) if (!FILEDLG95_unixfs_is_rooted_at_desktop()) { /* special handling for CSIDL_DRIVES */ - if (COMDLG32_PIDL_ILIsEqual(pidlTmp, pidlDrives)) + if (ILIsEqual(pidlTmp, pidlDrives)) { if(SUCCEEDED(IShellFolder_BindToObject(psfRoot, pidlTmp, NULL, &IID_IShellFolder, (LPVOID*)&psfDrives))) { @@ -3345,10 +3345,10 @@ static void FILEDLG95_LOOKIN_Init(HWND hwndCombo) { while (S_OK == IEnumIDList_Next(lpeDrives, 1, &pidlTmp1, NULL)) { - pidlAbsTmp = COMDLG32_PIDL_ILCombine(pidlTmp, pidlTmp1); + pidlAbsTmp = ILCombine(pidlTmp, pidlTmp1); FILEDLG95_LOOKIN_AddItem(hwndCombo, pidlAbsTmp,LISTEND); - COMDLG32_SHFree(pidlAbsTmp); - COMDLG32_SHFree(pidlTmp1); + ILFree(pidlAbsTmp); + ILFree(pidlTmp1); } IEnumIDList_Release(lpeDrives); } @@ -3357,14 +3357,14 @@ static void FILEDLG95_LOOKIN_Init(HWND hwndCombo) } }
- COMDLG32_SHFree(pidlTmp); + ILFree(pidlTmp); } IEnumIDList_Release(lpeRoot); } IShellFolder_Release(psfRoot); }
- COMDLG32_SHFree(pidlDrives); + ILFree(pidlDrives); }
/*********************************************************************** @@ -3528,12 +3528,12 @@ static int FILEDLG95_LOOKIN_AddItem(HWND hwnd,LPITEMIDLIST pidl, int iInsertId)
/* Calculate the indentation of the item in the lookin*/ pidlNext = pidl; - while( (pidlNext=COMDLG32_PIDL_ILGetNext(pidlNext)) ) + while ((pidlNext = ILGetNext(pidlNext))) { tmpFolder->m_iIndent++; }
- tmpFolder->pidlItem = COMDLG32_PIDL_ILClone(pidl); + tmpFolder->pidlItem = ILClone(pidl);
if(tmpFolder->m_iIndent > liInfos->iMaxIndentation) liInfos->iMaxIndentation = tmpFolder->m_iIndent; @@ -3568,7 +3568,7 @@ static int FILEDLG95_LOOKIN_AddItem(HWND hwnd,LPITEMIDLIST pidl, int iInsertId) return iItemID; }
- COMDLG32_SHFree( tmpFolder->pidlItem ); + ILFree( tmpFolder->pidlItem ); heap_free( tmpFolder ); return -1;
@@ -3597,8 +3597,7 @@ static int FILEDLG95_LOOKIN_InsertItemAfterParent(HWND hwnd,LPITEMIDLIST pidl) iParentPos = FILEDLG95_LOOKIN_InsertItemAfterParent(hwnd,pidlParent); }
- /* Free pidlParent memory */ - COMDLG32_SHFree(pidlParent); + ILFree(pidlParent);
return FILEDLG95_LOOKIN_AddItem(hwnd,pidl,iParentPos + 1); } @@ -3665,7 +3664,7 @@ static int FILEDLG95_LOOKIN_RemoveMostExpandedItem(HWND hwnd) if((iItemPos = FILEDLG95_LOOKIN_SearchItem(hwnd,liInfos->iMaxIndentation,SEARCH_EXP)) >=0) { SFOLDER *tmpFolder = (LPSFOLDER) CBGetItemDataPtr(hwnd,iItemPos); - COMDLG32_SHFree(tmpFolder->pidlItem); + ILFree(tmpFolder->pidlItem); heap_free(tmpFolder); SendMessageW(hwnd, CB_DELETESTRING, iItemPos, 0); liInfos->iMaxIndentation--; @@ -3697,7 +3696,7 @@ static int FILEDLG95_LOOKIN_SearchItem(HWND hwnd,WPARAM searchArg,int iSearchMet { LPSFOLDER tmpFolder = (LPSFOLDER) CBGetItemDataPtr(hwnd,i);
- if(iSearchMethod == SEARCH_PIDL && COMDLG32_PIDL_ILIsEqual((LPITEMIDLIST)searchArg,tmpFolder->pidlItem)) + if (iSearchMethod == SEARCH_PIDL && ILIsEqual((LPITEMIDLIST)searchArg, tmpFolder->pidlItem)) return i; if(iSearchMethod == SEARCH_EXP && tmpFolder->m_iIndent == (int)searchArg) return i; @@ -3728,7 +3727,7 @@ static void FILEDLG95_LOOKIN_Clean(HWND hwnd) for(iPos = iCount-1;iPos>=0;iPos--) { SFOLDER *tmpFolder = (LPSFOLDER) CBGetItemDataPtr(fodInfos->DlgInfos.hwndLookInCB,iPos); - COMDLG32_SHFree(tmpFolder->pidlItem); + ILFree(tmpFolder->pidlItem); heap_free(tmpFolder); SendMessageW(fodInfos->DlgInfos.hwndLookInCB, CB_DELETESTRING, iPos, 0); } @@ -3845,7 +3844,7 @@ static HRESULT COMDLG32_StrRetToStrNW (LPWSTR dest, DWORD len, LPSTRRET src, con { case STRRET_WSTR: lstrcpynW(dest, src->u.pOleStr, len); - COMDLG32_SHFree(src->u.pOleStr); + CoTaskMemFree(src->u.pOleStr); break;
case STRRET_CSTR: @@ -3939,7 +3938,7 @@ LPITEMIDLIST GetPidlFromDataObject ( IDataObject *doSelected, UINT nPidlIndex) LPIDA cida = GlobalLock(medium.u.hGlobal); if(nPidlIndex <= cida->cidl) { - pidl = COMDLG32_PIDL_ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[nPidlIndex]])); + pidl = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[nPidlIndex]])); } COMCTL32_ReleaseStgMedium(medium); } @@ -4050,8 +4049,8 @@ LPITEMIDLIST GetParentPidl(LPITEMIDLIST pidl)
TRACE("%p\n", pidl);
- pidlParent = COMDLG32_PIDL_ILClone(pidl); - COMDLG32_PIDL_ILRemoveLastID(pidlParent); + pidlParent = ILClone(pidl); + ILRemoveLastID(pidlParent);
return pidlParent; } @@ -4131,7 +4130,7 @@ static BOOL BrowseSelectedFolder(HWND hwnd) if(fodInfos->ofnInfos->Flags & OFN_EXPLORER) SendCustomDlgNotificationMessage(hwnd,CDN_FOLDERCHANGE); } - COMDLG32_SHFree( pidlSelection ); + ILFree( pidlSelection ); }
return bBrowseSelFolder; diff --git a/dlls/comdlg32/filedlgbrowser.c b/dlls/comdlg32/filedlgbrowser.c index baa9f1a790..1b119f6c2b 100644 --- a/dlls/comdlg32/filedlgbrowser.c +++ b/dlls/comdlg32/filedlgbrowser.c @@ -40,6 +40,7 @@ #include "shlguid.h" #include "servprov.h" #include "wine/debug.h" +#include "wine/heap.h"
WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
@@ -155,7 +156,7 @@ static BOOL COMDLG32_StrRetToStrNW (LPVOID dest, DWORD len, LPSTRRET src, LPCITE { case STRRET_WSTR: lstrcpynW(dest, src->u.pOleStr, len); - COMDLG32_SHFree(src->u.pOleStr); + CoTaskMemFree(src->u.pOleStr); break;
case STRRET_CSTR: @@ -194,7 +195,7 @@ IShellBrowser * IShellBrowserImpl_Construct(HWND hwndOwner) FileOpenDlgInfos *fodInfos = get_filedlg_infoptr(hwndOwner); IShellBrowserImpl *sb;
- sb = COMDLG32_SHAlloc(sizeof(IShellBrowserImpl)); + sb = heap_alloc(sizeof(*sb));
/* Initialisation of the member variables */ sb->ref=1; @@ -267,10 +268,8 @@ static ULONG WINAPI IShellBrowserImpl_Release(IShellBrowser * iface) TRACE("(%p,%u)\n", This, ref + 1);
if (!ref) - { - COMDLG32_SHFree(This); - TRACE("-- destroyed\n"); - } + heap_free(This); + return ref; }
@@ -363,7 +362,7 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface, return hRes; } /* create an absolute pidl */ - pidlTmp = COMDLG32_PIDL_ILCombine(fodInfos->ShellInfos.pidlAbsCurrent, pidl); + pidlTmp = ILCombine(fodInfos->ShellInfos.pidlAbsCurrent, pidl); } else if(wFlags & SBSP_PARENT) { @@ -375,7 +374,7 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface, else /* SBSP_ABSOLUTE is 0x0000 */ { /* An absolute pidl (relative from the desktop) */ - pidlTmp = COMDLG32_PIDL_ILClone(pidl); + pidlTmp = ILClone(pidl); psfTmp = GetShellFolderFromPidl(pidlTmp); }
@@ -387,10 +386,10 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface,
/* If the pidl to browse to is equal to the actual pidl ... do nothing and pretend you did it*/ - if(COMDLG32_PIDL_ILIsEqual(pidlTmp,fodInfos->ShellInfos.pidlAbsCurrent)) + if (ILIsEqual(pidlTmp, fodInfos->ShellInfos.pidlAbsCurrent)) { IShellFolder_Release(psfTmp); - COMDLG32_SHFree(pidlTmp); + ILFree(pidlTmp); TRACE("keep current folder\n"); return NOERROR; } @@ -430,7 +429,7 @@ static HRESULT WINAPI IShellBrowserImpl_BrowseObject(IShellBrowser *iface, fodInfos->Shell.FOIShellFolder = psfTmp;
/* Release old pidlAbsCurrent and update its value */ - COMDLG32_SHFree(fodInfos->ShellInfos.pidlAbsCurrent); + ILFree(fodInfos->ShellInfos.pidlAbsCurrent); fodInfos->ShellInfos.pidlAbsCurrent = pidlTmp;
COMDLG32_UpdateCurrentDir(fodInfos); @@ -784,8 +783,7 @@ static HRESULT WINAPI IShellBrowserImpl_ICommDlgBrowser_OnDefaultCommand(ICommDl hRes = S_OK; }
- /* Free memory used by pidl */ - COMDLG32_SHFree(pidl); + ILFree(pidl);
return hRes; }