Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
725c0261
Commit
725c0261
authored
Mar 21, 2018
by
Nikolay Sivov
Committed by
Alexandre Julliard
Mar 21, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
comdlg32: Use shell API directly.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
8bbb32c9
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
50 additions
and
97 deletions
+50
-97
cdlg.h
dlls/comdlg32/cdlg.h
+0
-12
cdlg32.c
dlls/comdlg32/cdlg32.c
+0
-32
filedlg.c
dlls/comdlg32/filedlg.c
+39
-40
filedlgbrowser.c
dlls/comdlg32/filedlgbrowser.c
+11
-13
No files found.
dlls/comdlg32/cdlg.h
View file @
725c0261
...
...
@@ -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
...
...
dlls/comdlg32/cdlg32.c
View file @
725c0261
...
...
@@ -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
;
...
...
dlls/comdlg32/filedlg.c
View file @
725c0261
...
...
@@ -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_SH
Free
(
pidl
);
IL
Free
(
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_SH
Free
(
pidl
);
IL
Free
(
pidl
);
}
}
...
...
@@ -2510,7 +2510,7 @@ int FILEDLG95_ValidatePathAction(LPWSTR lpstrPathAndFile, IShellFolder **ppsf,
nOpenAction
=
ONOPEN_OPEN
;
break
;
}
COMDLG32_SH
Free
(
pidl
);
IL
Free
(
pidl
);
pidl
=
NULL
;
}
else
if
(
!
(
flags
&
OFN_NOVALIDATE
))
...
...
@@ -2542,7 +2542,7 @@ int FILEDLG95_ValidatePathAction(LPWSTR lpstrPathAndFile, IShellFolder **ppsf,
break
;
}
}
if
(
pidl
)
COMDLG32_SH
Free
(
pidl
);
IL
Free
(
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_SH
Free
(
pidlCurrent
);
IL
Free
(
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_SH
Free
(
fodInfos
->
ShellInfos
.
pidlAbsCurrent
);
IL
Free
(
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_SH
Free
(
pidlTmp
);
IL
Free
(
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_SH
Free
(
pidlAbsTmp
);
COMDLG32_SH
Free
(
pidlTmp1
);
IL
Free
(
pidlAbsTmp
);
IL
Free
(
pidlTmp1
);
}
IEnumIDList_Release
(
lpeDrives
);
}
...
...
@@ -3357,14 +3357,14 @@ static void FILEDLG95_LOOKIN_Init(HWND hwndCombo)
}
}
COMDLG32_SH
Free
(
pidlTmp
);
IL
Free
(
pidlTmp
);
}
IEnumIDList_Release
(
lpeRoot
);
}
IShellFolder_Release
(
psfRoot
);
}
COMDLG32_SH
Free
(
pidlDrives
);
IL
Free
(
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_SH
Free
(
tmpFolder
->
pidlItem
);
IL
Free
(
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_SH
Free
(
tmpFolder
->
pidlItem
);
IL
Free
(
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_SH
Free
(
tmpFolder
->
pidlItem
);
IL
Free
(
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
);
C
OMDLG32_SH
Free
(
src
->
u
.
pOleStr
);
C
oTaskMem
Free
(
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_SH
Free
(
pidlSelection
);
IL
Free
(
pidlSelection
);
}
return
bBrowseSelFolder
;
...
...
dlls/comdlg32/filedlgbrowser.c
View file @
725c0261
...
...
@@ -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
);
C
OMDLG32_SH
Free
(
src
->
u
.
pOleStr
);
C
oTaskMem
Free
(
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_SH
Free
(
pidlTmp
);
IL
Free
(
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_SH
Free
(
fodInfos
->
ShellInfos
.
pidlAbsCurrent
);
IL
Free
(
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
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment