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
d1f1d34c
Commit
d1f1d34c
authored
Apr 12, 2005
by
Michael Jung
Committed by
Alexandre Julliard
Apr 12, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented enough of IShellFolder2 to make UnixFolder work within the
open/save-dialogs.
parent
0c8e5838
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
191 additions
and
57 deletions
+191
-57
shfldr_unixfs.c
dlls/shell32/shfldr_unixfs.c
+191
-57
No files found.
dlls/shell32/shfldr_unixfs.c
View file @
d1f1d34c
...
...
@@ -33,6 +33,8 @@
#include "wine/debug.h"
#include "shell32_main.h"
#include "shfldr.h"
#include "shresdef.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
shell
);
...
...
@@ -62,6 +64,8 @@ static BOOL UNIXFS_path_to_pidl(char *path, LPITEMIDLIST *ppidl) {
int
cSubDirs
,
cPidlLen
;
char
*
pSlash
,
*
pSubDir
;
TRACE
(
"path=%s, ppidl=%p"
,
debugstr_a
(
path
),
ppidl
);
/* Fail, if no absolute path given */
if
(
!
ppidl
||
!
path
||
path
[
0
]
!=
'/'
)
return
FALSE
;
...
...
@@ -120,6 +124,8 @@ static BOOL UNIXFS_pidl_to_path(LPCITEMIDLIST pidl, PSZ *path) {
DWORD
dwPathLen
;
char
*
pNextDir
;
TRACE
(
"(pidl=%p, path=%p)
\n
"
,
pidl
,
path
);
*
path
=
NULL
;
/* Find the UnixFolderClass root */
...
...
@@ -182,6 +188,8 @@ static BOOL UNIXFS_build_subfolder_pidls(const char *path, LPITEMIDLIST **apidl,
DWORD
cSubDirs
,
i
;
USHORT
sLen
;
TRACE
(
"(path=%s, apidl=%p, pCount=%p)
\n
"
,
path
,
apidl
,
pCount
);
*
apidl
=
NULL
;
*
pCount
=
0
;
...
...
@@ -353,10 +361,20 @@ UnixFolderIcon UnixFolderIconSingleton = { &UnixFolderIcon_IExtractIconW_Vtbl };
* Class whose heap based instances represent unix filesystem directories.
*/
static
shvheader
GenericSFHeader
[]
=
{
{
IDS_SHV_COLUMN1
,
SHCOLSTATE_TYPE_STR
|
SHCOLSTATE_ONBYDEFAULT
,
LVCFMT_RIGHT
,
15
},
{
IDS_SHV_COLUMN2
,
SHCOLSTATE_TYPE_STR
|
SHCOLSTATE_ONBYDEFAULT
,
LVCFMT_RIGHT
,
10
},
{
IDS_SHV_COLUMN3
,
SHCOLSTATE_TYPE_STR
|
SHCOLSTATE_ONBYDEFAULT
,
LVCFMT_RIGHT
,
10
},
{
IDS_SHV_COLUMN4
,
SHCOLSTATE_TYPE_DATE
|
SHCOLSTATE_ONBYDEFAULT
,
LVCFMT_RIGHT
,
12
},
{
IDS_SHV_COLUMN5
,
SHCOLSTATE_TYPE_STR
|
SHCOLSTATE_ONBYDEFAULT
,
LVCFMT_RIGHT
,
5
}
};
#define GENERICSHELLVIEWCOLUMNS 5
/* UnixFolder object layout and typedef.
*/
typedef
struct
_UnixFolder
{
const
IShellFolder
Vtbl
*
lpIShellFolder
Vtbl
;
const
IShellFolder
2Vtbl
*
lpIShellFolder2
Vtbl
;
const
IPersistFolderVtbl
*
lpIPersistFolderVtbl
;
ULONG
m_cRef
;
CHAR
*
m_pszPath
;
...
...
@@ -379,17 +397,19 @@ static void UnixFolder_Destroy(UnixFolder *pUnixFolder) {
SHFree
(
pUnixFolder
);
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_QueryInterface
(
IShellFolder
*
iface
,
REFIID
riid
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_QueryInterface
(
IShellFolder2
*
iface
,
REFIID
riid
,
void
**
ppv
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
,
iface
);
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
2
,
iface
);
TRACE
(
"(iface=%p, riid=%p, ppv=%p)
\n
"
,
iface
,
riid
,
ppv
);
if
(
!
ppv
)
return
E_INVALIDARG
;
if
(
IsEqualIID
(
&
IID_IUnknown
,
riid
)
||
IsEqualIID
(
&
IID_IShellFolder
,
riid
))
{
*
ppv
=
&
This
->
lpIShellFolderVtbl
;
if
(
IsEqualIID
(
&
IID_IUnknown
,
riid
)
||
IsEqualIID
(
&
IID_IShellFolder
,
riid
)
||
IsEqualIID
(
&
IID_IShellFolder2
,
riid
))
{
*
ppv
=
&
This
->
lpIShellFolder2Vtbl
;
}
else
if
(
IsEqualIID
(
&
IID_IPersistFolder
,
riid
)
||
IsEqualIID
(
&
IID_IPersist
,
riid
))
{
*
ppv
=
&
This
->
lpIPersistFolderVtbl
;
}
else
{
...
...
@@ -401,16 +421,16 @@ static HRESULT WINAPI UnixFolder_IShellFolder_QueryInterface(IShellFolder *iface
return
S_OK
;
}
static
ULONG
WINAPI
UnixFolder_IShellFolder
_AddRef
(
IShellFolder
*
iface
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
,
iface
);
static
ULONG
WINAPI
UnixFolder_IShellFolder
2_AddRef
(
IShellFolder2
*
iface
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
2
,
iface
);
TRACE
(
"(iface=%p)
\n
"
,
iface
);
return
InterlockedIncrement
(
&
This
->
m_cRef
);
}
static
ULONG
WINAPI
UnixFolder_IShellFolder
_Release
(
IShellFolder
*
iface
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
,
iface
);
static
ULONG
WINAPI
UnixFolder_IShellFolder
2_Release
(
IShellFolder2
*
iface
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
2
,
iface
);
ULONG
cRef
;
TRACE
(
"(iface=%p)
\n
"
,
iface
);
...
...
@@ -423,7 +443,7 @@ static ULONG WINAPI UnixFolder_IShellFolder_Release(IShellFolder *iface) {
return
cRef
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_ParseDisplayName
(
IShellFolder
*
iface
,
HWND
hwndOwner
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_ParseDisplayName
(
IShellFolder2
*
iface
,
HWND
hwndOwner
,
LPBC
pbcReserved
,
LPOLESTR
lpszDisplayName
,
ULONG
*
pchEaten
,
LPITEMIDLIST
*
ppidl
,
ULONG
*
pdwAttributes
)
{
...
...
@@ -448,10 +468,10 @@ static HRESULT WINAPI UnixFolder_IShellFolder_ParseDisplayName(IShellFolder* ifa
static
IUnknown
*
UnixSubFolderIterator_Construct
(
UnixFolder
*
pUnixFolder
);
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_EnumObjects
(
IShellFolder
*
iface
,
HWND
hwndOwner
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_EnumObjects
(
IShellFolder2
*
iface
,
HWND
hwndOwner
,
SHCONTF
grfFlags
,
IEnumIDList
**
ppEnumIDList
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
,
iface
);
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
2
,
iface
);
IUnknown
*
newIterator
;
HRESULT
hr
;
...
...
@@ -465,10 +485,10 @@ static HRESULT WINAPI UnixFolder_IShellFolder_EnumObjects(IShellFolder* iface, H
return
hr
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_BindToObject
(
IShellFolder
*
iface
,
LPCITEMIDLIST
pidl
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_BindToObject
(
IShellFolder2
*
iface
,
LPCITEMIDLIST
pidl
,
LPBC
pbcReserved
,
REFIID
riid
,
void
**
ppvOut
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
,
iface
);
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder
2
,
iface
);
IPersistFolder
*
persistFolder
;
LPITEMIDLIST
pidlSubFolder
;
HRESULT
hr
;
...
...
@@ -488,52 +508,89 @@ static HRESULT WINAPI UnixFolder_IShellFolder_BindToObject(IShellFolder* iface,
return
hr
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_BindToStorage
(
IShellFolder
*
This
,
LPCITEMIDLIST
pidl
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_BindToStorage
(
IShellFolder2
*
This
,
LPCITEMIDLIST
pidl
,
LPBC
pbcReserved
,
REFIID
riid
,
void
**
ppvObj
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_CompareIDs
(
IShellFolder
*
This
,
LPARAM
lParam
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_CompareIDs
(
IShellFolder2
*
This
,
LPARAM
lParam
,
LPCITEMIDLIST
pidl1
,
LPCITEMIDLIST
pidl2
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_CreateViewObject
(
IShellFolder
*
This
,
HWND
hwndOwner
,
REFIID
riid
,
void
**
ppv
Out
)
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_CreateViewObject
(
IShellFolder2
*
iface
,
HWND
hwndOwner
,
REFIID
riid
,
void
**
ppv
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
HRESULT
hr
=
E_INVALIDARG
;
TRACE
(
"(iface=%p, hwndOwner=%p, riid=%p, ppv=%p) stub
\n
"
,
iface
,
hwndOwner
,
riid
,
ppv
);
if
(
!
ppv
)
return
E_INVALIDARG
;
*
ppv
=
NULL
;
if
(
IsEqualIID
(
&
IID_IShellView
,
riid
))
{
LPSHELLVIEW
pShellView
;
pShellView
=
IShellView_Constructor
((
IShellFolder
*
)
iface
);
if
(
pShellView
)
{
hr
=
IShellView_QueryInterface
(
pShellView
,
riid
,
ppv
);
IShellView_Release
(
pShellView
);
}
}
return
hr
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_GetAttributesOf
(
IShellFolder
*
iface
,
UINT
cidl
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_GetAttributesOf
(
IShellFolder2
*
iface
,
UINT
cidl
,
LPCITEMIDLIST
*
apidl
,
SFGAOF
*
rgfInOut
)
{
TRACE
(
"(iface=%p, cidl=%u, apidl=%p, rgfInOut=%p) semi-stub
\n
"
,
iface
,
cidl
,
apidl
,
rgfInOut
);
*
rgfInOut
=
*
rgfInOut
&
(
SFGAO_FOLDER
|
SFGAO_HASSUBFOLDER
);
*
rgfInOut
=
*
rgfInOut
&
(
SFGAO_F
ILESYSTEM
|
SFGAO_F
OLDER
|
SFGAO_HASSUBFOLDER
);
return
S_OK
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_GetUIObjectOf
(
IShellFolder
*
iface
,
HWND
hwndOwner
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_GetUIObjectOf
(
IShellFolder2
*
iface
,
HWND
hwndOwner
,
UINT
cidl
,
LPCITEMIDLIST
*
apidl
,
REFIID
riid
,
UINT
*
prgfInOut
,
void
**
ppvOut
)
{
UnixFolder
*
This
=
ADJUST_THIS
(
UnixFolder
,
IShellFolder2
,
iface
);
TRACE
(
"(iface=%p, hwndOwner=%p, cidl=%d, apidl=%p, riid=%s, prgfInOut=%p, ppv=%p)
\n
"
,
iface
,
hwndOwner
,
cidl
,
apidl
,
debugstr_guid
(
riid
),
prgfInOut
,
ppvOut
);
if
(
IsEqualIID
(
&
IID_IExtractIconW
,
riid
))
{
if
(
IsEqualIID
(
&
IID_IContextMenu
,
riid
))
{
*
ppvOut
=
ISvItemCm_Constructor
((
IShellFolder
*
)
iface
,
This
->
m_pidlLocation
,
apidl
,
cidl
);
return
S_OK
;
}
else
if
(
IsEqualIID
(
&
IID_IDataObject
,
riid
))
{
*
ppvOut
=
IDataObject_Constructor
(
hwndOwner
,
This
->
m_pidlLocation
,
apidl
,
cidl
);
return
S_OK
;
}
else
if
(
IsEqualIID
(
&
IID_IExtractIconA
,
riid
))
{
FIXME
(
"IExtractIconA
\n
"
);
return
E_FAIL
;
}
else
if
(
IsEqualIID
(
&
IID_IExtractIconW
,
riid
))
{
*
ppvOut
=
&
UnixFolderIconSingleton
;
return
S_OK
;
}
return
E_NOTIMPL
;
}
else
if
(
IsEqualIID
(
&
IID_IDropTarget
,
riid
))
{
FIXME
(
"IDropTarget
\n
"
);
return
E_FAIL
;
}
else
if
(
IsEqualIID
(
&
IID_IShellLinkW
,
riid
))
{
FIXME
(
"IShellLinkW
\n
"
);
return
E_FAIL
;
}
else
if
(
IsEqualIID
(
&
IID_IShellLinkA
,
riid
))
{
FIXME
(
"IShellLinkA
\n
"
);
return
E_FAIL
;
}
else
{
FIXME
(
"Unknown interface %s in GetUIObjectOf
\n
"
,
debugstr_guid
(
riid
));
return
E_NOINTERFACE
;
}
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_GetDisplayNameOf
(
IShellFolder
*
iface
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_GetDisplayNameOf
(
IShellFolder2
*
iface
,
LPCITEMIDLIST
pidl
,
SHGDNF
uFlags
,
STRRET
*
lpName
)
{
LPCSHITEMID
pSHItem
=
(
LPCSHITEMID
)
pidl
;
...
...
@@ -591,48 +648,125 @@ static HRESULT WINAPI UnixFolder_IShellFolder_GetDisplayNameOf(IShellFolder* ifa
return
S_OK
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder
_SetNameOf
(
IShellFolder
*
This
,
HWND
hwnd
,
static
HRESULT
WINAPI
UnixFolder_IShellFolder
2_SetNameOf
(
IShellFolder2
*
This
,
HWND
hwnd
,
LPCITEMIDLIST
pidl
,
LPCOLESTR
lpszName
,
SHGDNF
uFlags
,
LPITEMIDLIST
*
ppidlOut
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
/* VTable for UnixFolder's IShellFolder interface.
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_EnumSearches
(
IShellFolder2
*
iface
,
IEnumExtraSearch
**
ppEnum
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_GetDefaultColumn
(
IShellFolder2
*
iface
,
DWORD
dwReserved
,
ULONG
*
pSort
,
ULONG
*
pDisplay
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_GetDefaultColumnState
(
IShellFolder2
*
iface
,
UINT
iColumn
,
SHCOLSTATEF
*
pcsFlags
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_GetDefaultSearchGUID
(
IShellFolder2
*
iface
,
GUID
*
pguid
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_GetDetailsEx
(
IShellFolder2
*
iface
,
LPCITEMIDLIST
pidl
,
const
SHCOLUMNID
*
pscid
,
VARIANT
*
pv
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_GetDetailsOf
(
IShellFolder2
*
iface
,
LPCITEMIDLIST
pidl
,
UINT
iColumn
,
SHELLDETAILS
*
psd
)
{
HRESULT
hr
=
E_FAIL
;
TRACE
(
"(iface=%p, pidl=%p, iColumn=%d, psd=%p) stub
\n
"
,
iface
,
pidl
,
iColumn
,
psd
);
if
(
!
psd
||
iColumn
>=
GENERICSHELLVIEWCOLUMNS
)
return
E_INVALIDARG
;
if
(
!
pidl
)
{
psd
->
fmt
=
GenericSFHeader
[
iColumn
].
fmt
;
psd
->
cxChar
=
GenericSFHeader
[
iColumn
].
cxChar
;
psd
->
str
.
uType
=
STRRET_CSTR
;
LoadStringA
(
shell32_hInstance
,
GenericSFHeader
[
iColumn
].
colnameid
,
psd
->
str
.
u
.
cStr
,
MAX_PATH
);
return
S_OK
;
}
else
{
switch
(
iColumn
)
{
case
0
:
hr
=
IShellFolder2_GetDisplayNameOf
(
iface
,
pidl
,
SHGDN_NORMAL
|
SHGDN_INFOLDER
,
&
psd
->
str
);
break
;
}
psd
->
str
.
uType
=
STRRET_CSTR
;
}
return
hr
;
}
static
HRESULT
WINAPI
UnixFolder_IShellFolder2_MapColumnToSCID
(
IShellFolder2
*
iface
,
UINT
iColumn
,
SHCOLUMNID
*
pscid
)
{
TRACE
(
"stub
\n
"
);
return
E_NOTIMPL
;
}
/* VTable for UnixFolder's IShellFolder2 interface.
*/
static
const
IShellFolderVtbl
UnixFolder_IShellFolder_Vtbl
=
{
UnixFolder_IShellFolder_QueryInterface
,
UnixFolder_IShellFolder_AddRef
,
UnixFolder_IShellFolder_Release
,
UnixFolder_IShellFolder_ParseDisplayName
,
UnixFolder_IShellFolder_EnumObjects
,
UnixFolder_IShellFolder_BindToObject
,
UnixFolder_IShellFolder_BindToStorage
,
UnixFolder_IShellFolder_CompareIDs
,
UnixFolder_IShellFolder_CreateViewObject
,
UnixFolder_IShellFolder_GetAttributesOf
,
UnixFolder_IShellFolder_GetUIObjectOf
,
UnixFolder_IShellFolder_GetDisplayNameOf
,
UnixFolder_IShellFolder_SetNameOf
static
const
IShellFolder2Vtbl
UnixFolder_IShellFolder2_Vtbl
=
{
UnixFolder_IShellFolder2_QueryInterface
,
UnixFolder_IShellFolder2_AddRef
,
UnixFolder_IShellFolder2_Release
,
UnixFolder_IShellFolder2_ParseDisplayName
,
UnixFolder_IShellFolder2_EnumObjects
,
UnixFolder_IShellFolder2_BindToObject
,
UnixFolder_IShellFolder2_BindToStorage
,
UnixFolder_IShellFolder2_CompareIDs
,
UnixFolder_IShellFolder2_CreateViewObject
,
UnixFolder_IShellFolder2_GetAttributesOf
,
UnixFolder_IShellFolder2_GetUIObjectOf
,
UnixFolder_IShellFolder2_GetDisplayNameOf
,
UnixFolder_IShellFolder2_SetNameOf
,
UnixFolder_IShellFolder2_GetDefaultSearchGUID
,
UnixFolder_IShellFolder2_EnumSearches
,
UnixFolder_IShellFolder2_GetDefaultColumn
,
UnixFolder_IShellFolder2_GetDefaultColumnState
,
UnixFolder_IShellFolder2_GetDetailsEx
,
UnixFolder_IShellFolder2_GetDetailsOf
,
UnixFolder_IShellFolder2_MapColumnToSCID
};
static
HRESULT
WINAPI
UnixFolder_IPersistFolder_QueryInterface
(
IPersistFolder
*
This
,
REFIID
riid
,
void
**
ppvObject
)
{
return
UnixFolder_IShellFolder_QueryInterface
(
(
IShellFolder
*
)
ADJUST_THIS
(
UnixFolder
,
IPersistFolder
,
This
),
riid
,
ppvObject
);
return
UnixFolder_IShellFolder
2
_QueryInterface
(
(
IShellFolder
2
*
)
ADJUST_THIS
(
UnixFolder
,
IPersistFolder
,
This
),
riid
,
ppvObject
);
}
static
ULONG
WINAPI
UnixFolder_IPersistFolder_AddRef
(
IPersistFolder
*
This
)
{
return
UnixFolder_IShellFolder_AddRef
(
(
IShellFolder
*
)
ADJUST_THIS
(
UnixFolder
,
IPersistFolder
,
This
));
return
UnixFolder_IShellFolder
2
_AddRef
(
(
IShellFolder
2
*
)
ADJUST_THIS
(
UnixFolder
,
IPersistFolder
,
This
));
}
static
ULONG
WINAPI
UnixFolder_IPersistFolder_Release
(
IPersistFolder
*
This
)
{
return
UnixFolder_IShellFolder_Release
(
(
IShellFolder
*
)
ADJUST_THIS
(
UnixFolder
,
IPersistFolder
,
This
));
return
UnixFolder_IShellFolder
2
_Release
(
(
IShellFolder
2
*
)
ADJUST_THIS
(
UnixFolder
,
IPersistFolder
,
This
));
}
static
HRESULT
WINAPI
UnixFolder_IPersistFolder_GetClassID
(
IPersistFolder
*
This
,
CLSID
*
pClassID
)
...
...
@@ -684,16 +818,16 @@ HRESULT WINAPI UnixFolder_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *
TRACE
(
"(pUnkOuter=%p, riid=%p, ppv=%p)
\n
"
,
pUnkOuter
,
riid
,
ppv
);
pUnixFolder
=
SHAlloc
((
ULONG
)
sizeof
(
UnixFolder
));
pUnixFolder
->
lpIShellFolder
Vtbl
=
&
UnixFolder_IShellFolder
_Vtbl
;
pUnixFolder
->
lpIShellFolder
2Vtbl
=
&
UnixFolder_IShellFolder2
_Vtbl
;
pUnixFolder
->
lpIPersistFolderVtbl
=
&
UnixFolder_IPersistFolder_Vtbl
;
pUnixFolder
->
m_cRef
=
0
;
pUnixFolder
->
m_pszPath
=
NULL
;
pUnixFolder
->
m_apidlSubDirs
=
NULL
;
pUnixFolder
->
m_cSubDirs
=
0
;
UnixFolder_IShellFolder
_AddRef
(
STATIC_CAST
(
IShellFolder
,
pUnixFolder
));
hr
=
UnixFolder_IShellFolder
_QueryInterface
(
STATIC_CAST
(
IShellFolder
,
pUnixFolder
),
riid
,
ppv
);
UnixFolder_IShellFolder
_Release
(
STATIC_CAST
(
IShellFolder
,
pUnixFolder
));
UnixFolder_IShellFolder
2_AddRef
(
STATIC_CAST
(
IShellFolder2
,
pUnixFolder
));
hr
=
UnixFolder_IShellFolder
2_QueryInterface
(
STATIC_CAST
(
IShellFolder2
,
pUnixFolder
),
riid
,
ppv
);
UnixFolder_IShellFolder
2_Release
(
STATIC_CAST
(
IShellFolder2
,
pUnixFolder
));
return
hr
;
}
...
...
@@ -716,7 +850,7 @@ typedef struct _UnixSubFolderIterator {
static
void
UnixSubFolderIterator_Destroy
(
UnixSubFolderIterator
*
iterator
)
{
TRACE
(
"(iterator=%p)
\n
"
,
iterator
);
UnixFolder_IShellFolder
_Release
((
IShellFolder
*
)
iterator
->
m_pUnixFolder
);
UnixFolder_IShellFolder
2_Release
((
IShellFolder2
*
)
iterator
->
m_pUnixFolder
);
SHFree
(
iterator
);
}
...
...
@@ -769,7 +903,7 @@ static HRESULT WINAPI UnixSubFolderIterator_IEnumIDList_Next(IEnumIDList* iface,
ULONG
i
;
TRACE
(
"(iface=%p, celt=%ld, rgelt=%p, pceltFetched=%p)
\n
"
,
iface
,
celt
,
rgelt
,
pceltFetched
);
for
(
i
=
0
;
(
i
<
celt
)
&&
(
This
->
m_cIdx
<
This
->
m_pUnixFolder
->
m_cSubDirs
);
i
++
,
This
->
m_cIdx
++
)
{
rgelt
[
i
]
=
ILClone
(
This
->
m_pUnixFolder
->
m_apidlSubDirs
[
This
->
m_cIdx
]);
}
...
...
@@ -837,7 +971,7 @@ static IUnknown *UnixSubFolderIterator_Construct(UnixFolder *pUnixFolder) {
iterator
->
m_pUnixFolder
=
pUnixFolder
;
UnixSubFolderIterator_IEnumIDList_AddRef
((
IEnumIDList
*
)
iterator
);
UnixFolder_IShellFolder
_AddRef
((
IShellFolder
*
)
pUnixFolder
);
UnixFolder_IShellFolder
2_AddRef
((
IShellFolder2
*
)
pUnixFolder
);
return
(
IUnknown
*
)
iterator
;
}
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