ReactOS 0.4.15-dev-8434-g155a7c7
shldataobject.cpp File Reference
#include "precomp.h"
Include dependency graph for shldataobject.cpp:

Go to the source code of this file.

Classes

struct  DataObjectAttributes
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
static HRESULT _BindToObject (PCUIDLIST_ABSOLUTE pidl, CComPtr< IShellFolder > &spFolder)
 
EXTERN_C HRESULT WINAPI SHGetAttributesFromDataObject (IDataObject *pDataObject, DWORD dwAttributeMask, DWORD *pdwAttributes, UINT *pcItems)
 
PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull (_In_ const CIDA *pCIDA, _In_ UINT Index)
 
PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem (_In_ IDataObject *pDO, _In_ UINT Index)
 

Variables

static CLIPFORMAT g_DataObjectAttributes = 0
 
static const DWORD dwDefaultAttributeMask
 

Function Documentation

◆ _BindToObject()

static HRESULT _BindToObject ( PCUIDLIST_ABSOLUTE  pidl,
CComPtr< IShellFolder > &  spFolder 
)
static

Definition at line 29 of file shldataobject.cpp.

30{
31 return SHBindToObject(NULL, pidl, IID_PPV_ARG(IShellFolder, &spFolder));
32}
#define NULL
Definition: types.h:112
EXTERN_C HRESULT SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ REFIID riid, _Out_ void **ppvObj)
Definition: utils.cpp:220
#define IID_PPV_ARG(Itype, ppType)

Referenced by SHGetAttributesFromDataObject().

◆ SHELL_CIDA_ILCloneFull()

PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull ( _In_ const CIDA pCIDA,
_In_ UINT  Index 
)

Definition at line 100 of file shldataobject.cpp.

101{
102 if (Index < pCIDA->cidl)
103 return ILCombine(HIDA_GetPIDLFolder(pCIDA), HIDA_GetPIDLItem(pCIDA, Index));
104 return NULL;
105}
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:712
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
Definition: shellutils.h:622
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
Definition: shellutils.h:617
_In_ WDFCOLLECTION _In_ ULONG Index

Referenced by DoGetFileTitle(), CCopyMoveToMenu::DoRealFileOp(), and SHELL_DataObject_ILCloneFullItem().

◆ SHELL_DataObject_ILCloneFullItem()

PIDLIST_ABSOLUTE SHELL_DataObject_ILCloneFullItem ( _In_ IDataObject pDO,
_In_ UINT  Index 
)

Definition at line 107 of file shldataobject.cpp.

108{
109 CDataObjectHIDA cida(pDO);
110 return SUCCEEDED(cida.hr()) ? SHELL_CIDA_ILCloneFull(cida, Index) : NULL;
111}
#define SUCCEEDED(hr)
Definition: intsafe.h:50
PIDLIST_ABSOLUTE SHELL_CIDA_ILCloneFull(_In_ const CIDA *pCIDA, _In_ UINT Index)

Referenced by CCopyMoveToMenu::Initialize().

◆ SHGetAttributesFromDataObject()

EXTERN_C HRESULT WINAPI SHGetAttributesFromDataObject ( IDataObject pDataObject,
DWORD  dwAttributeMask,
DWORD pdwAttributes,
UINT pcItems 
)

Definition at line 35 of file shldataobject.cpp.

36{
38 DWORD cItems = 0;
39 HRESULT hr = S_OK;
40
41 TRACE("(%p, 0x%x, %p, %p)\n", pDataObject, dwAttributeMask, pdwAttributes, pcItems);
42
44 g_DataObjectAttributes = (CLIPFORMAT)RegisterClipboardFormatW(L"DataObjectAttributes");
45
46 if (pDataObject)
47 {
49 if (FAILED(DataObject_GetData(pDataObject, g_DataObjectAttributes, &data, sizeof(data))))
50 {
51 TRACE("No attributes yet, creating new\n");
52 memset(&data, 0, sizeof(data));
53 }
54
55 DWORD dwQueryAttributes = dwAttributeMask | dwDefaultAttributeMask;
56
57 if ((data.dwMask & dwQueryAttributes) != dwQueryAttributes)
58 {
59 CDataObjectHIDA hida(pDataObject);
60 CComPtr<IShellFolder> spFolder;
61
62 if (!FAILED_UNEXPECTEDLY(hr = hida.hr()) &&
64 {
66 for (UINT n = 0; n < hida->cidl; ++n)
67 {
68 apidl.Add(HIDA_GetPIDLItem(hida, n));
69 }
70
71 SFGAOF rgfInOut = dwQueryAttributes;
72 hr = spFolder->GetAttributesOf(apidl.GetSize(), apidl.GetData(), &rgfInOut);
74 {
75 data.dwMask = dwQueryAttributes;
76 // Only store what we asked for
77 data.dwAttributes = rgfInOut & dwQueryAttributes;
78 data.cItems = apidl.GetSize();
79
80 hr = DataObject_SetData(pDataObject, g_DataObjectAttributes, &data, sizeof(data));
82 }
83 }
84 }
85
86 // Only give the user what they asked for, not everything else we have!
87 dwAttributes = data.dwAttributes & dwAttributeMask;
88 cItems = data.cItems;
89 }
90
91 if (pdwAttributes)
92 *pdwAttributes = dwAttributes;
93
94 if (pcItems)
95 *pcItems = cItems;
96
97 return hr;
98}
static HRESULT WINAPI DataObject_GetData(LPDATAOBJECT iface, LPFORMATETC pformatetcIn, STGMEDIUM *pmedium)
Definition: view.c:175
static HRESULT WINAPI DataObject_SetData(LPDATAOBJECT iface, LPFORMATETC pformatetc, STGMEDIUM *pmedium, BOOL fRelease)
Definition: view.c:203
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
static IShellFolder IShellItem **static IBindCtx LPITEMIDLIST SFGAOF
Definition: ebrowser.c:83
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLdouble n
Definition: glext.h:7729
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM ULONG int * pcItems
Definition: usp10.c:62
unsigned int UINT
Definition: ndis.h:50
#define L(x)
Definition: ntvdm.h:50
#define memset(x, y, z)
Definition: compat.h:39
static HRESULT _BindToObject(PCUIDLIST_ABSOLUTE pidl, CComPtr< IShellFolder > &spFolder)
static const DWORD dwDefaultAttributeMask
static CLIPFORMAT g_DataObjectAttributes
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwAttributes
Definition: vdmdbg.h:34
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)

Referenced by SHELL_LimitDropEffectToItemAttributes(), test_AttributesRegistration(), test_MultipleFiles(), and test_SpecialCases().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ dwDefaultAttributeMask

const DWORD dwDefaultAttributeMask
static
Initial value:
= SFGAO_CANCOPY | SFGAO_CANMOVE | SFGAO_STORAGE | SFGAO_CANRENAME |
SFGAO_CANDELETE | SFGAO_READONLY | SFGAO_STREAM | SFGAO_FOLDER

Definition at line 15 of file shldataobject.cpp.

Referenced by SHGetAttributesFromDataObject().

◆ g_DataObjectAttributes

CLIPFORMAT g_DataObjectAttributes = 0
static

Definition at line 14 of file shldataobject.cpp.

Referenced by SHGetAttributesFromDataObject().