Author: gadamopoulos
Date: Wed Aug 19 18:10:30 2015
New Revision: 68775
URL: 
http://svn.reactos.org/svn/reactos?rev=68775&view=rev
Log:
[SHELL32]
- Move the properties dialog for the recycle bin in its own file. The implementation of
the recycle bin is overly complicated and keeping with it a dialog for editing some
registry entries makes it worse.
Added:
    trunk/reactos/dll/win32/shell32/dialogs/recycler_prop.cpp
      - copied, changed from r68772,
trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp
Modified:
    trunk/reactos/dll/win32/shell32/CMakeLists.txt
    trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp
Modified: trunk/reactos/dll/win32/shell32/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/CMakeLis…
==============================================================================
--- trunk/reactos/dll/win32/shell32/CMakeLists.txt      [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/CMakeLists.txt      [iso-8859-1] Wed Aug 19 18:10:30
2015
@@ -28,6 +28,7 @@
     dialogs/folder_options.cpp
     dialogs/filedefext.cpp
     dialogs/fprop.cpp
+    dialogs/recycler_prop.cpp
     CDropTargetHelper.cpp
     CEnumIDListBase.cpp
     CExtractIcon.cpp
Copied: trunk/reactos/dll/win32/shell32/dialogs/recycler_prop.cpp (from r68772,
trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp)
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/dialogs/…
==============================================================================
--- trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp     [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/dialogs/recycler_prop.cpp   [iso-8859-1] Wed Aug 19
18:10:30 2015
@@ -21,95 +21,7 @@
 #include <precomp.h>
-#include <mmsystem.h>
-#include <ntquery.h>
-
-#define MAX_PROPERTY_SHEET_PAGE 32
-
 WINE_DEFAULT_DEBUG_CHANNEL(CRecycleBin);
-
-typedef struct
-{
-    int column_name_id;
-    const GUID *fmtId;
-    DWORD pid;
-    int pcsFlags;
-    int fmt;
-    int cxChars;
-} columninfo;
-
-static const columninfo RecycleBinColumns[] =
-{
-    {IDS_SHV_COLUMN1,        &FMTID_Storage,   PID_STG_NAME,
SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT,  LVCFMT_LEFT,  30},
-    {IDS_SHV_COLUMN_DELFROM, &FMTID_Displaced, PID_DISPLACED_FROM,
SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT,  LVCFMT_LEFT,  30},
-    {IDS_SHV_COLUMN_DELDATE, &FMTID_Displaced, PID_DISPLACED_DATE,
SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT,  20},
-    {IDS_SHV_COLUMN2,        &FMTID_Storage,   PID_STG_SIZE,
SHCOLSTATE_TYPE_INT | SHCOLSTATE_ONBYDEFAULT,  LVCFMT_RIGHT, 20},
-    {IDS_SHV_COLUMN3,        &FMTID_Storage,   PID_STG_STORAGETYPE,
SHCOLSTATE_TYPE_INT | SHCOLSTATE_ONBYDEFAULT,  LVCFMT_LEFT,  20},
-    {IDS_SHV_COLUMN4,        &FMTID_Storage,   PID_STG_WRITETIME,
SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT,  20},
-    /*    {"creation time",  &FMTID_Storage,   PID_STG_CREATETIME,
SHCOLSTATE_TYPE_DATE,                        LVCFMT_LEFT,  20}, */
-    /*    {"attribs",        &FMTID_Storage,   PID_STG_ATTRIBUTES,
SHCOLSTATE_TYPE_STR,                         LVCFMT_LEFT,  20},       */
-};
-
-#define COLUMN_NAME    0
-#define COLUMN_DELFROM 1
-#define COLUMN_DATEDEL 2
-#define COLUMN_SIZE    3
-#define COLUMN_TYPE    4
-#define COLUMN_MTIME   5
-
-#define COLUMNS_COUNT  6
-
-/*
- * Recycle Bin folder
- */
-
-class CRecycleBinEnum :
-    public CEnumIDListBase
-{
-    private:
-    public:
-        CRecycleBinEnum();
-        ~CRecycleBinEnum();
-        HRESULT WINAPI Initialize(DWORD dwFlags);
-        static BOOL WINAPI CBEnumRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile);
-        BOOL WINAPI CBEnumRecycleBin(IN HANDLE hDeletedFile);
-
-        BEGIN_COM_MAP(CRecycleBinEnum)
-        COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
-        END_COM_MAP()
-};
-
-class CRecycleBinItemContextMenu :
-    public CComObjectRootEx<CComMultiThreadModelNoCS>,
-    public IContextMenu2
-{
-    private:
-        LPITEMIDLIST                        apidl;
-    public:
-        CRecycleBinItemContextMenu();
-        ~CRecycleBinItemContextMenu();
-        HRESULT WINAPI Initialize(LPCITEMIDLIST pidl);
-
-        // IContextMenu
-        virtual HRESULT WINAPI QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
idCmdFirst, UINT idCmdLast, UINT uFlags);
-        virtual HRESULT WINAPI InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi);
-        virtual HRESULT WINAPI GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT
*lpReserved, LPSTR lpszName, UINT uMaxNameLen);
-
-        // IContextMenu2
-        virtual HRESULT WINAPI HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-        BEGIN_COM_MAP(CRecycleBinItemContextMenu)
-        COM_INTERFACE_ENTRY_IID(IID_IContextMenu, IContextMenu)
-        COM_INTERFACE_ENTRY_IID(IID_IContextMenu2, IContextMenu2)
-        END_COM_MAP()
-};
-
-typedef struct
-{
-    PIDLRecycleStruct *pFileDetails;
-    HANDLE hDeletedFile;
-    BOOL bFound;
-} SEARCH_CONTEXT, *PSEARCH_CONTEXT;
 typedef struct
 {
@@ -118,758 +30,7 @@
     DWORD dwMaxCapacity;
 } DRIVE_ITEM_CONTEXT, *PDRIVE_ITEM_CONTEXT;
-BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile)
-{
-    PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context;
-
-    PDELETED_FILE_DETAILS_W pFileDetails;
-    DWORD dwSize;
-    BOOL ret;
-
-    if (!GetDeletedFileDetailsW(hDeletedFile,
-                                0,
-                                NULL,
-                                &dwSize) &&
-            GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-    {
-        ERR("GetDeletedFileDetailsW failed\n");
-        return FALSE;
-    }
-
-    pFileDetails = (DELETED_FILE_DETAILS_W *)SHAlloc(dwSize);
-    if (!pFileDetails)
-    {
-        ERR("No memory\n");
-        return FALSE;
-    }
-
-    if (!GetDeletedFileDetailsW(hDeletedFile,
-                                dwSize,
-                                pFileDetails,
-                                NULL))
-    {
-        ERR("GetDeletedFileDetailsW failed\n");
-        SHFree(pFileDetails);
-        return FALSE;
-    }
-
-    ret = memcmp(pFileDetails, pContext->pFileDetails, dwSize);
-    if (!ret)
-    {
-        pContext->hDeletedFile = hDeletedFile;
-        pContext->bFound = TRUE;
-    }
-    else
-        CloseRecycleBinHandle(hDeletedFile);
-
-    SHFree(pFileDetails);
-    return ret;
-}
-
-static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl)
-{
-    LPPIDLDATA pdata = _ILGetDataPointer(pidl);
-
-    if (pdata && pdata->type == 0x00)
-        return (PIDLRecycleStruct*) & (pdata->u.crecycle);
-
-    return NULL;
-}
-
-CRecycleBinEnum::CRecycleBinEnum()
-{
-}
-
-CRecycleBinEnum::~CRecycleBinEnum()
-{
-}
-
-HRESULT WINAPI CRecycleBinEnum::Initialize(DWORD dwFlags)
-{
-    static LPCWSTR szDrive = L"C:\\";
-
-    if (dwFlags & SHCONTF_NONFOLDERS)
-    {
-        TRACE("Starting Enumeration\n");
-
-        if (!EnumerateRecycleBinW(szDrive /* FIXME */ , CBEnumRecycleBin, (PVOID)this))
-        {
-            WARN("Error: EnumerateCRecycleBinW failed\n");
-            return E_FAIL;
-        }
-    }
-    else
-    {
-        // do nothing
-    }
-    return S_OK;
-}
-
-static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails)
-{
-    PIDLDATA tmp;
-    LPITEMIDLIST pidl;
-    PIDLRecycleStruct * p;
-    int size0 = (char*)&tmp.u.crecycle.szName - (char*)&tmp.u.crecycle;
-    int size = size0;
-
-    tmp.type = 0x00;
-    size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR);
-
-    pidl = (LPITEMIDLIST)SHAlloc(size + 4);
-    if (!pidl)
-        return pidl;
-
-    pidl->mkid.cb = size + 2;
-    memcpy(pidl->mkid.abID, &tmp, 2 + size0);
-
-    p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle;
-    RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W));
-    wcscpy(p->szName, pFileDetails->FileName);
-    *(WORD*)((char*)pidl + (size + 2)) = 0;
-    return pidl;
-}
-
-BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile)
-{
-    return static_cast<CRecycleBinEnum
*>(Context)->CBEnumRecycleBin(hDeletedFile);
-}
-
-BOOL WINAPI CRecycleBinEnum::CBEnumRecycleBin(IN HANDLE hDeletedFile)
-{
-    PDELETED_FILE_DETAILS_W pFileDetails;
-    DWORD dwSize;
-    LPITEMIDLIST pidl = NULL;
-    BOOL ret;
-
-    if (!GetDeletedFileDetailsW(hDeletedFile,
-                                0,
-                                NULL,
-                                &dwSize) &&
-            GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-    {
-        ERR("GetDeletedFileDetailsW failed\n");
-        return FALSE;
-    }
-
-    pFileDetails = (DELETED_FILE_DETAILS_W *)SHAlloc(dwSize);
-    if (!pFileDetails)
-    {
-        ERR("No memory\n");
-        return FALSE;
-    }
-
-    if (!GetDeletedFileDetailsW(hDeletedFile,
-                                dwSize,
-                                pFileDetails,
-                                NULL))
-    {
-        ERR("GetDeletedFileDetailsW failed\n");
-        SHFree(pFileDetails);
-        return FALSE;
-    }
-
-    pidl = _ILCreateRecycleItem(pFileDetails);
-    if (!pidl)
-    {
-        SHFree(pFileDetails);
-        return FALSE;
-    }
-
-    ret = AddToEnumList(pidl);
-
-    if (!ret)
-        SHFree(pidl);
-    SHFree(pFileDetails);
-    TRACE("Returning %d\n", ret);
-    CloseRecycleBinHandle(hDeletedFile);
-    return ret;
-}
-
-/**************************************************************************
-* IContextMenu2 Bitbucket Item Implementation
-*/
-
-CRecycleBinItemContextMenu::CRecycleBinItemContextMenu()
-{
-    apidl = NULL;
-}
-
-CRecycleBinItemContextMenu::~CRecycleBinItemContextMenu()
-{
-    ILFree(apidl);
-}
-
-HRESULT WINAPI CRecycleBinItemContextMenu::Initialize(LPCITEMIDLIST pidl)
-{
-    apidl = ILClone(pidl);
-    if (apidl == NULL)
-        return E_OUTOFMEMORY;
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBinItemContextMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu,
UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
-{
-    WCHAR szBuffer[30] = {0};
-    ULONG Count = 1;
-
-    TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x
)\n", this, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
-
-    if (LoadStringW(shell32_hInstance, IDS_RESTORE, szBuffer, sizeof(szBuffer) /
sizeof(WCHAR)))
-    {
-        szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING,
szBuffer, MFS_ENABLED);
-        Count++;
-    }
-
-    if (LoadStringW(shell32_hInstance, IDS_CUT, szBuffer, sizeof(szBuffer) /
sizeof(WCHAR)))
-    {
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR,
NULL, MFS_ENABLED);
-        szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING,
szBuffer, MFS_ENABLED);
-    }
-
-    if (LoadStringW(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer) /
sizeof(WCHAR)))
-    {
-        szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR,
NULL, MFS_ENABLED);
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING,
szBuffer, MFS_ENABLED);
-    }
-
-    if (LoadStringW(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer) /
sizeof(WCHAR)))
-    {
-        szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR,
NULL, MFS_ENABLED);
-        _InsertMenuItemW(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING,
szBuffer, MFS_DEFAULT);
-    }
-
-    return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count);
-}
-
-HRESULT WINAPI CRecycleBinItemContextMenu::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
-{
-    SEARCH_CONTEXT Context;
-    static LPCWSTR szDrive = L"C:\\";
-
-    TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n", this, lpcmi,
lpcmi->lpVerb, lpcmi->hwnd);
-
-    if (lpcmi->lpVerb == MAKEINTRESOURCEA(1) || lpcmi->lpVerb ==
MAKEINTRESOURCEA(5))
-    {
-        Context.pFileDetails = _ILGetRecycleStruct(apidl);
-        Context.bFound = FALSE;
-
-        EnumerateRecycleBinW(szDrive, CBSearchRecycleBin, (PVOID)&Context);
-        if (!Context.bFound)
-            return E_FAIL;
-
-        if (lpcmi->lpVerb == MAKEINTRESOURCEA(1))
-        {
-            /* restore file */
-            if (RestoreFile(Context.hDeletedFile))
-                return S_OK;
-            else
-                return E_FAIL;
-        }
-        else
-        {
-            DeleteFileHandleToRecycleBin(Context.hDeletedFile);
-            return E_NOTIMPL;
-        }
-    }
-    else if (lpcmi->lpVerb == MAKEINTRESOURCEA(3))
-    {
-        FIXME("implement cut\n");
-        return E_NOTIMPL;
-    }
-    else if (lpcmi->lpVerb == MAKEINTRESOURCEA(7))
-    {
-        FIXME("implement properties\n");
-        return E_NOTIMPL;
-    }
-
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBinItemContextMenu::GetCommandString(UINT_PTR idCommand, UINT
uFlags, UINT *lpReserved, LPSTR lpszName, UINT uMaxNameLen)
-{
-    TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n", this, idCommand,
uFlags, lpReserved, lpszName, uMaxNameLen);
-
-    return E_FAIL;
-}
-
-HRESULT WINAPI CRecycleBinItemContextMenu::HandleMenuMsg(UINT uMsg, WPARAM wParam, LPARAM
lParam)
-{
-    TRACE("CRecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx
lp=%lx)\n", this, uMsg, wParam, lParam);
-
-    return E_NOTIMPL;
-}
-
-/**************************************************************************
-* registers clipboardformat once
-*/
-void CRecycleBin::SF_RegisterClipFmt()
-{
-    TRACE ("(%p)\n", this);
-
-    if (!cfShellIDList)
-        cfShellIDList = RegisterClipboardFormatW(CFSTR_SHELLIDLIST);
-}
-
-CRecycleBin::CRecycleBin()
-{
-    pidl = NULL;
-    iIdEmpty = 0;
-    cfShellIDList = 0;
-    SF_RegisterClipFmt();
-    fAcceptFmt = FALSE;
-}
-
-CRecycleBin::~CRecycleBin()
-{
-    /*    InterlockedDecrement(&objCount);*/
-    SHFree(pidl);
-}
-
-/*************************************************************************
- * RecycleBin IPersistFolder2 interface
- */
-
-HRESULT WINAPI CRecycleBin::GetClassID(CLSID *pClassID)
-{
-    TRACE("(%p, %p)\n", this, pClassID);
-    if (pClassID == NULL)
-        return E_INVALIDARG;
-    memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID));
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::Initialize(LPCITEMIDLIST pidl)
-{
-    TRACE("(%p, %p)\n", this, pidl);
-
-    SHFree((LPVOID)this->pidl);
-    this->pidl = ILClone(pidl);
-    if (this->pidl == NULL)
-        return E_OUTOFMEMORY;
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::GetCurFolder(LPITEMIDLIST *ppidl)
-{
-    TRACE("\n");
-    *ppidl = ILClone(pidl);
-    return S_OK;
-}
-
-/*************************************************************************
- * RecycleBin IShellFolder2 interface
- */
-
-HRESULT WINAPI CRecycleBin::ParseDisplayName(HWND hwnd, LPBC pbc,
-        LPOLESTR pszDisplayName, ULONG *pchEaten, PIDLIST_RELATIVE *ppidl,
-        ULONG *pdwAttributes)
-{
-    FIXME("stub\n");
-    return E_NOTIMPL;
-}
-
-
-PDELETED_FILE_DETAILS_W
-UnpackDetailsFromPidl(LPCITEMIDLIST pidl)
-{
-    return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID;
-}
-
-HRESULT WINAPI CRecycleBin::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST
*ppEnumIDList)
-{
-    return ShellObjectCreatorInit<CRecycleBinEnum>(dwFlags, IID_IEnumIDList,
ppEnumIDList);
-}
-
-HRESULT WINAPI CRecycleBin::BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbc, REFIID riid,
void **ppv)
-{
-    FIXME("(%p, %p, %p, %s, %p) - stub\n", this, pidl, pbc,
debugstr_guid(&riid), ppv);
-    return E_NOTIMPL;
-}
-
-HRESULT WINAPI CRecycleBin::BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbc, REFIID riid,
void **ppv)
-{
-    FIXME("(%p, %p, %p, %s, %p) - stub\n", this, pidl, pbc,
debugstr_guid(&riid), ppv);
-    return E_NOTIMPL;
-}
-
-HRESULT WINAPI CRecycleBin::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1,
PCUIDLIST_RELATIVE pidl2)
-{
-    /* TODO */
-    TRACE("(%p, %p, %p, %p)\n", this, (void *)lParam, pidl1, pidl2);
-    if (pidl1->mkid.cb != pidl2->mkid.cb)
-        return MAKE_HRESULT(SEVERITY_SUCCESS, 0, pidl1->mkid.cb - pidl2->mkid.cb);
-    return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (unsigned short)memcmp(pidl1->mkid.abID,
pidl2->mkid.abID, pidl1->mkid.cb));
-}
-
-HRESULT WINAPI CRecycleBin::CreateViewObject(HWND hwndOwner, REFIID riid, void **ppv)
-{
-    CComPtr<IShellView> pShellView;
-    HRESULT hr = E_NOINTERFACE;
-
-    TRACE("(%p, %p, %s, %p)\n", this, hwndOwner, debugstr_guid(&riid),
ppv);
-
-    if (!ppv)
-        return hr;
-
-    *ppv = NULL;
-
-    if (IsEqualIID (riid, IID_IDropTarget))
-    {
-        hr = this->QueryInterface (IID_IDropTarget, ppv);
-    }
-    else if (IsEqualIID (riid, IID_IContextMenu) || IsEqualIID (riid, IID_IContextMenu2))
-    {
-        hr = this->QueryInterface(riid, ppv);
-    }
-    else if (IsEqualIID (riid, IID_IShellView))
-    {
-        hr = CDefView_Constructor(this, riid, ppv);
-    }
-    else
-        return hr;
-    TRACE ("-- (%p)->(interface=%p)\n", this, ppv);
-    return hr;
-
-}
-
-HRESULT WINAPI CRecycleBin::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl,
-        SFGAOF *rgfInOut)
-{
-    TRACE("(%p, %d, {%p, ...}, {%x})\n", this, cidl, apidl ? apidl[0] : NULL,
(unsigned int)*rgfInOut);
-    *rgfInOut &= SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANLINK;
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::GetUIObjectOf(HWND hwndOwner, UINT cidl,
PCUITEMID_CHILD_ARRAY apidl,
-        REFIID riid, UINT *prgfInOut, void **ppv)
-{
-    IUnknown *pObj = NULL;
-    HRESULT hr = E_INVALIDARG;
-
-    TRACE ("(%p)->(%p,%u,apidl=%p, %p %p)\n", this,
-           hwndOwner, cidl, apidl, prgfInOut, ppv);
-
-    if (!ppv)
-        return hr;
-
-    *ppv = NULL;
-
-    if ((IsEqualIID (riid, IID_IContextMenu) || IsEqualIID(riid, IID_IContextMenu2))
&& (cidl >= 1))
-    {
-        hr = ShellObjectCreatorInit<CRecycleBinItemContextMenu>(apidl[0], riid,
&pObj);
-    }
-    else if (IsEqualIID (riid, IID_IDropTarget) && (cidl == 1))
-    {
-        IDropTarget * pDt = NULL;
-        hr = QueryInterface(IID_PPV_ARG(IDropTarget, &pDt));
-        pObj = pDt;
-    }
-    else if(IsEqualIID(riid, IID_IExtractIconA) && (cidl == 1))
-    {
-        // FIXME: This is not correct, it does not show the right icons
-        LPITEMIDLIST pidlItem = ILCombine(pidl, apidl[0]);
-        pObj = IExtractIconA_Constructor(pidlItem);
-        SHFree(pidlItem);
-        hr = S_OK;
-    }
-    else if (IsEqualIID(riid, IID_IExtractIconW) && (cidl == 1))
-    {
-        // FIXME: This is not correct, it does not show the right icons
-        LPITEMIDLIST pidlItem = ILCombine(pidl, apidl[0]);
-        pObj = IExtractIconW_Constructor(pidlItem);
-        SHFree(pidlItem);
-        hr = S_OK;
-    }
-    else
-        hr = E_NOINTERFACE;
-
-    if (SUCCEEDED(hr) && !pObj)
-        hr = E_OUTOFMEMORY;
-
-    *ppv = pObj;
-    TRACE ("(%p)->hr=0x%08x\n", this, hr);
-    return hr;
-}
-
-HRESULT WINAPI CRecycleBin::GetDisplayNameOf(PCUITEMID_CHILD pidl, SHGDNF uFlags, STRRET
*pName)
-{
-    PIDLRecycleStruct *pFileDetails;
-    LPWSTR pFileName;
-
-    TRACE("(%p, %p, %x, %p)\n", this, pidl, (unsigned int)uFlags, pName);
-
-
-    if (_ILIsBitBucket (pidl))
-    {
-        WCHAR pszPath[100];
-
-        if (HCR_GetClassNameW(CLSID_RecycleBin, pszPath, MAX_PATH))
-        {
-            pName->uType = STRRET_WSTR;
-            pName->pOleStr = StrDupW(pszPath);
-            return S_OK;
-        }
-    }
-
-    pFileDetails = _ILGetRecycleStruct(pidl);
-    if (!pFileDetails)
-    {
-        pName->cStr[0] = 0;
-        pName->uType = STRRET_CSTR;
-        return E_INVALIDARG;
-    }
-
-    pFileName = wcsrchr(pFileDetails->szName, L'\\');
-    if (!pFileName)
-    {
-        pName->cStr[0] = 0;
-        pName->uType = STRRET_CSTR;
-        return E_UNEXPECTED;
-    }
-
-    pName->pOleStr = StrDupW(pFileName + 1);
-    if (pName->pOleStr == NULL)
-        return E_OUTOFMEMORY;
-
-    pName->uType = STRRET_WSTR;
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::SetNameOf(HWND hwnd, PCUITEMID_CHILD pidl, LPCOLESTR pszName,
-                                      SHGDNF uFlags, PITEMID_CHILD *ppidlOut)
-{
-    TRACE("\n");
-    return E_FAIL; /* not supported */
-}
-
-HRESULT WINAPI CRecycleBin::GetDefaultSearchGUID(GUID *pguid)
-{
-    FIXME("stub\n");
-    return E_NOTIMPL;
-}
-
-HRESULT WINAPI CRecycleBin::EnumSearches(IEnumExtraSearch **ppEnum)
-{
-    FIXME("stub\n");
-    *ppEnum = NULL;
-    return E_NOTIMPL;
-}
-
-HRESULT WINAPI CRecycleBin::GetDefaultColumn(DWORD dwReserved, ULONG *pSort, ULONG
*pDisplay)
-{
-    TRACE("(%p, %x, %p, %p)\n", this, (unsigned int)dwReserved, pSort,
pDisplay);
-    *pSort = 0;
-    *pDisplay = 0;
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags)
-{
-    TRACE("(%p, %d, %p)\n", this, iColumn, pcsFlags);
-    if (iColumn >= COLUMNS_COUNT)
-        return E_INVALIDARG;
-    *pcsFlags = RecycleBinColumns[iColumn].pcsFlags;
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid,
VARIANT *pv)
-{
-    FIXME("stub\n");
-    return E_NOTIMPL;
-}
-
-static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft)
-{
-    FILETIME lft;
-    SYSTEMTIME time;
-    int ret;
-
-    FileTimeToLocalFileTime(ft, &lft);
-    FileTimeToSystemTime(&lft, &time);
-
-    ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer,
size);
-    if (ret > 0 && ret < size)
-    {
-        /* Append space + time without seconds */
-        buffer[ret-1] = ' ';
-        GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL,
&buffer[ret], size - ret);
-    }
-
-    return (ret != 0 ? E_FAIL : S_OK);
-}
-
-HRESULT WINAPI CRecycleBin::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn,
LPSHELLDETAILS pDetails)
-{
-    PIDLRecycleStruct * pFileDetails;
-    WCHAR buffer[MAX_PATH];
-    WCHAR szTypeName[100];
-    LPWSTR pszBackslash;
-    UINT Length;
-
-    TRACE("(%p, %p, %d, %p)\n", this, pidl, iColumn, pDetails);
-    if (iColumn >= COLUMNS_COUNT)
-        return E_FAIL;
-    pDetails->fmt = RecycleBinColumns[iColumn].fmt;
-    pDetails->cxChar = RecycleBinColumns[iColumn].cxChars;
-    if (pidl == NULL)
-    {
-        pDetails->str.uType = STRRET_WSTR;
-        LoadStringW(shell32_hInstance, RecycleBinColumns[iColumn].column_name_id, buffer,
MAX_PATH);
-        return SHStrDupW(buffer, &pDetails->str.pOleStr);
-    }
-
-    if (iColumn == COLUMN_NAME)
-        return GetDisplayNameOf(pidl, SHGDN_NORMAL, &pDetails->str);
-
-    pFileDetails = _ILGetRecycleStruct(pidl);
-    switch (iColumn)
-    {
-        case COLUMN_DATEDEL:
-            FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime);
-            break;
-        case COLUMN_DELFROM:
-            pszBackslash = wcsrchr(pFileDetails->szName, L'\\');
-            Length = (pszBackslash - pFileDetails->szName);
-            memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR));
-            buffer[Length] = L'\0';
-            break;
-        case COLUMN_SIZE:
-            StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH);
-            break;
-        case COLUMN_MTIME:
-            FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification);
-            break;
-        case COLUMN_TYPE:
-            szTypeName[0] = L'\0';
-            wcscpy(buffer, PathFindExtensionW(pFileDetails->szName));
-            if (!( HCR_MapTypeToValueW(buffer, buffer, sizeof(buffer) / sizeof(WCHAR),
TRUE) &&
-                    HCR_MapTypeToValueW(buffer, szTypeName, sizeof(szTypeName) /
sizeof(WCHAR), FALSE )))
-            {
-                wcscpy (szTypeName, PathFindExtensionW(pFileDetails->szName));
-                wcscat(szTypeName, L"-");
-                Length = wcslen(szTypeName);
-                if (LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1,
&szTypeName[Length], (sizeof(szTypeName) / sizeof(WCHAR)) - Length))
-                    szTypeName[(sizeof(szTypeName)/sizeof(WCHAR))-1] = L'\0';
-            }
-            pDetails->str.uType = STRRET_WSTR;
-            return SHStrDupW(szTypeName, &pDetails->str.pOleStr);
-            break;
-        default:
-            return E_FAIL;
-    }
-
-    pDetails->str.uType = STRRET_WSTR;
-    return SHStrDupW(buffer, &pDetails->str.pOleStr);
-}
-
-HRESULT WINAPI CRecycleBin::MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid)
-{
-    TRACE("(%p, %d, %p)\n", this, iColumn, pscid);
-    if (iColumn >= COLUMNS_COUNT)
-        return E_INVALIDARG;
-    pscid->fmtid = *RecycleBinColumns[iColumn].fmtId;
-    pscid->pid = RecycleBinColumns[iColumn].pid;
-    return S_OK;
-}
-
-/*************************************************************************
- * RecycleBin IContextMenu interface
- */
-
-HRESULT WINAPI CRecycleBin::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT
idCmdFirst, UINT idCmdLast, UINT uFlags)
-{
-    WCHAR szBuffer[100];
-    MENUITEMINFOW mii;
-    int id = 1;
-
-    TRACE("QueryContextMenu %p %p %u %u %u %u\n", this, hMenu, indexMenu,
idCmdFirst, idCmdLast, uFlags );
-
-    if (!hMenu)
-        return E_INVALIDARG;
-
-    memset(&mii, 0, sizeof(mii));
-    mii.cbSize = sizeof(mii);
-    mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
-    mii.fState = MFS_ENABLED;
-    szBuffer[0] = L'\0';
-    LoadStringW(shell32_hInstance, IDS_EMPTY_BITBUCKET, szBuffer, sizeof(szBuffer) /
sizeof(WCHAR));
-    mii.dwTypeData = szBuffer;
-    mii.cch = wcslen(mii.dwTypeData);
-    mii.wID = idCmdFirst + id++;
-    mii.fType = MFT_STRING;
-    iIdEmpty = 1;
-
-    if (!InsertMenuItemW(hMenu, indexMenu, TRUE, &mii))
-        return E_FAIL;
-
-    return MAKE_HRESULT(SEVERITY_SUCCESS, 0, id);
-}
-
-HRESULT WINAPI CRecycleBin::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
-{
-    HRESULT hr;
-    LPSHELLBROWSER lpSB;
-    IShellView * lpSV = NULL;
-
-    TRACE("%p %p verb %p\n", this, lpcmi, lpcmi->lpVerb);
-
-    if (LOWORD(lpcmi->lpVerb) == iIdEmpty)
-    {
-        // FIXME
-        // path & flags
-        hr = SHEmptyRecycleBinW(lpcmi->hwnd, L"C:\\", 0);
-        TRACE("result %x\n", hr);
-        if (hr != S_OK)
-            return hr;
-
-        lpSB = (LPSHELLBROWSER)SendMessageA(lpcmi->hwnd, CWM_GETISHELLBROWSER, 0, 0);
-        if (lpSB && SUCCEEDED(lpSB->QueryActiveShellView(&lpSV)))
-            lpSV->Refresh();
-    }
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::GetCommandString(UINT_PTR idCommand, UINT uFlags, UINT
*lpReserved, LPSTR lpszName, UINT uMaxNameLen)
-{
-    FIXME("%p %lu %u %p %p %u\n", this, idCommand, uFlags, lpReserved,
lpszName, uMaxNameLen);
-
-    return E_NOTIMPL;
-}
-
-/*************************************************************************
- * RecycleBin IShellPropSheetExt interface
- */
-
-HRESULT WINAPI CRecycleBin::AddPages(LPFNSVADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
-{
-    FIXME("%p %p %lu\n", this, pfnAddPage, lParam);
-
-    return E_NOTIMPL;
-}
-
-HRESULT WINAPI CRecycleBin::ReplacePage(EXPPS uPageID, LPFNSVADDPROPSHEETPAGE
pfnReplaceWith, LPARAM lParam)
-{
-    FIXME("%p %lu %p %lu\n", this, uPageID, pfnReplaceWith, lParam);
-
-    return E_NOTIMPL;
-}
-
-/*************************************************************************
- * RecycleBin IShellExtInit interface
- */
-
-HRESULT WINAPI CRecycleBin::Initialize(LPCITEMIDLIST pidlFolder, IDataObject *pdtobj,
HKEY hkeyProgID)
-{
-    TRACE("%p %p %p %p\n", this, pidlFolder, pdtobj, hkeyProgID );
-    return S_OK;
-}
-
-void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable)
+static void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable)
 {
     if (bEnable)
     {
@@ -1250,509 +411,3 @@
     else
         return TRUE;
 }
-
-BOOL
-TRASH_CanTrashFile(LPCWSTR wszPath)
-{
-    LONG ret;
-    DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength;
-    DWORD FileSystemFlags, dwSize, dwDisposition;
-    HKEY hKey;
-    WCHAR szBuffer[10];
-    WCHAR szKey[150] =
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\";
-
-    if (wszPath[1] != L':')
-    {
-        /* path is UNC */
-        return FALSE;
-    }
-
-    if (GetDriveTypeW(wszPath) != DRIVE_FIXED)
-    {
-        /* no bitbucket on removable media */
-        return FALSE;
-    }
-
-    if (!GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber,
&MaxComponentLength, &FileSystemFlags, NULL, 0))
-    {
-        ERR("GetVolumeInformationW failed with %u\n", GetLastError());
-        return FALSE;
-    }
-
-    swprintf(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber),
HIWORD(VolSerialNumber));
-    wcscat(szKey, szBuffer);
-
-    if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey,
&dwDisposition) != ERROR_SUCCESS)
-    {
-        ERR("RegCreateKeyExW failed\n");
-        return FALSE;
-    }
-
-    if (dwDisposition  & REG_CREATED_NEW_KEY)
-    {
-        /* per default move to bitbucket */
-        dwNukeOnDelete = 0;
-        RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD,
(LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
-        /* per default unlimited size */
-        dwSize = -1;
-        RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize,
sizeof(DWORD));
-        RegCloseKey(hKey);
-        return TRUE;
-    }
-    else
-    {
-        dwSize = sizeof(dwNukeOnDelete);
-        ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType,
(LPBYTE)&dwNukeOnDelete, &dwSize);
-        if (ret != ERROR_SUCCESS)
-        {
-            if (ret ==  ERROR_FILE_NOT_FOUND)
-            {
-                /* restore key and enable bitbucket */
-                dwNukeOnDelete = 0;
-                RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD,
(LPBYTE)&dwNukeOnDelete, sizeof(DWORD));
-            }
-            RegCloseKey(hKey);
-            return TRUE;
-        }
-        else if (dwNukeOnDelete)
-        {
-            /* do not delete to bitbucket */
-            RegCloseKey(hKey);
-            return FALSE;
-        }
-        /* FIXME
-         * check if bitbucket is full
-         */
-        RegCloseKey(hKey);
-        return TRUE;
-    }
-}
-
-BOOL
-TRASH_TrashFile(LPCWSTR wszPath)
-{
-    TRACE("(%s)\n", debugstr_w(wszPath));
-    return DeleteFileToRecycleBin(wszPath);
-}
-
-/*************************************************************************
- * SHUpdateCRecycleBinIcon                                [SHELL32.@]
- *
- * Undocumented
- */
-EXTERN_C HRESULT WINAPI SHUpdateRecycleBinIcon(void)
-{
-    FIXME("stub\n");
-
-
-
-    return S_OK;
-}
-
-/****************************************************************************
- * IDropTarget implementation
- */
-BOOL CRecycleBin::QueryDrop(DWORD dwKeyState, LPDWORD pdwEffect)
-{
-    /* TODO on shift we should delete, we should update the cursor manager to show this.
*/
-
-    DWORD dwEffect = DROPEFFECT_COPY;
-
-    *pdwEffect = DROPEFFECT_NONE;
-
-    if (fAcceptFmt) { /* Does our interpretation of the keystate ... */
-        *pdwEffect = KeyStateToDropEffect (dwKeyState);
-
-        if (*pdwEffect == DROPEFFECT_NONE)
-            *pdwEffect = dwEffect;
-
-        /* ... matches the desired effect ? */
-        if (dwEffect & *pdwEffect) {
-            return TRUE;
-        }
-    }
-    return FALSE;
-}
-
-HRESULT WINAPI CRecycleBin::DragEnter(IDataObject *pDataObject,
-                                    DWORD dwKeyState, POINTL pt, DWORD *pdwEffect)
-{
-    TRACE("Recycle bin drag over (%p)\n", this);
-    /* The recycle bin accepts pretty much everything, and sets a CSIDL flag. */
-    fAcceptFmt = TRUE;
-
-    QueryDrop(dwKeyState, pdwEffect);
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::DragOver(DWORD dwKeyState, POINTL pt,
-                                   DWORD *pdwEffect)
-{
-    TRACE("(%p)\n", this);
-
-    if (!pdwEffect)
-        return E_INVALIDARG;
-
-    QueryDrop(dwKeyState, pdwEffect);
-
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::DragLeave()
-{
-    TRACE("(%p)\n", this);
-
-    fAcceptFmt = FALSE;
-
-    return S_OK;
-}
-
-HRESULT WINAPI CRecycleBin::Drop(IDataObject *pDataObject,
-                               DWORD dwKeyState, POINTL pt, DWORD *pdwEffect)
-{
-    TRACE("(%p) object dropped on recycle bin, effect %u\n", this, *pdwEffect);
-
-    /* TODO: pdwEffect should be read and make the drop object be permanently deleted in
the move case (shift held) */
-
-    FORMATETC fmt;
-    TRACE("(%p)->(DataObject=%p)\n", this, pDataObject);
-    InitFormatEtc (fmt, cfShellIDList, TYMED_HGLOBAL);
-
-    /* Handle cfShellIDList Drop objects here, otherwise send the approriate message to
other software */
-    if (SUCCEEDED(pDataObject->QueryGetData(&fmt))) {
-        IStream *s;
-        CoMarshalInterThreadInterfaceInStream(IID_IDataObject, pDataObject, &s);
-        SHCreateThread(DoDeleteThreadProc, s, NULL, NULL);
-    }
-    else
-    {
-        /*
-         * TODO call SetData on the data object with format CFSTR_TARGETCLSID
-         * set to the Recycle Bin's class identifier CLSID_RecycleBin.
-         */
-    }
-    return S_OK;
-}
-
-DWORD WINAPI DoDeleteThreadProc(LPVOID lpParameter)
-{
-    CoInitialize(NULL);
-    CComPtr<IDataObject> pDataObject;
-    HRESULT hr = CoGetInterfaceAndReleaseStream
(static_cast<IStream*>(lpParameter), IID_PPV_ARG(IDataObject, &pDataObject));
-    if (SUCCEEDED(hr))
-    {
-        DoDeleteDataObject(pDataObject);
-    }
-    CoUninitialize();
-    return 0;
-}
-
-HRESULT WINAPI DoDeleteDataObject(IDataObject *pda)
-{
-    TRACE("performing delete");
-    HRESULT hr;
-
-    STGMEDIUM medium;
-    FORMATETC formatetc;
-    InitFormatEtc(formatetc, RegisterClipboardFormatW(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
-    hr = pda->GetData(&formatetc, &medium);
-    if (FAILED(hr))
-        return hr;
-
-    /* lock the handle */
-    LPIDA lpcida = (LPIDA)GlobalLock(medium.hGlobal);
-    if (!lpcida)
-    {
-        ReleaseStgMedium(&medium);
-        return E_FAIL;
-    }
-
-    /* convert the data into pidl */
-    LPITEMIDLIST pidl;
-    LPITEMIDLIST *apidl = _ILCopyCidaToaPidl(&pidl, lpcida);
-    if (!apidl)
-    {
-        ReleaseStgMedium(&medium);
-        return E_FAIL;
-    }
-
-    CComPtr<IShellFolder> psfDesktop;
-    CComPtr<IShellFolder> psfFrom = NULL;
-
-    /* Grab the desktop shell folder */
-    hr = SHGetDesktopFolder(&psfDesktop);
-    if (FAILED(hr))
-    {
-        ERR("SHGetDesktopFolder failed\n");
-        SHFree(pidl);
-        _ILFreeaPidl(apidl, lpcida->cidl);
-        ReleaseStgMedium(&medium);
-        return E_FAIL;
-    }
-
-    /* Find source folder, this is where the clipboard data was copied from */
-    if (_ILIsDesktop(pidl))
-    {
-        psfFrom = psfDesktop;
-    }
-    else
-    {
-        hr = psfDesktop->BindToObject(pidl, NULL, IID_PPV_ARG(IShellFolder,
&psfFrom));
-        if (FAILED(hr))
-        {
-            ERR("no IShellFolder\n");
-            SHFree(pidl);
-            _ILFreeaPidl(apidl, lpcida->cidl);
-            ReleaseStgMedium(&medium);
-            return E_FAIL;
-        }
-    }
-
-    STRRET strTemp;
-    hr = psfFrom->GetDisplayNameOf(apidl[0], SHGDN_FORPARSING, &strTemp);
-    if (FAILED(hr))
-    {
-        ERR("IShellFolder_GetDisplayNameOf failed with %x\n", hr);
-        SHFree(pidl);
-        _ILFreeaPidl(apidl, lpcida->cidl);
-        ReleaseStgMedium(&medium);
-        return hr;
-    }
-
-    WCHAR wszPath[MAX_PATH];
-    hr = StrRetToBufW(&strTemp, apidl[0], wszPath, _countof(wszPath));
-    if (FAILED(hr))
-    {
-        ERR("StrRetToBufW failed with %x\n", hr);
-        SHFree(pidl);
-        _ILFreeaPidl(apidl, lpcida->cidl);
-        ReleaseStgMedium(&medium);
-        return hr;
-    }
-
-    /* Only keep the base path */
-    LPWSTR pwszFilename = PathFindFileNameW(wszPath);
-    *pwszFilename = L'\0';
-
-    /* Build paths list */
-    LPWSTR pwszPaths = BuildPathsList(wszPath, lpcida->cidl, (LPCITEMIDLIST*) apidl);
-    if (!pwszPaths)
-    {
-        SHFree(pidl);
-        _ILFreeaPidl(apidl, lpcida->cidl);
-        ReleaseStgMedium(&medium);
-        return E_FAIL;
-    }
-
-    /* Delete them */
-    SHFILEOPSTRUCTW FileOp;
-    ZeroMemory(&FileOp, sizeof(FileOp));
-    FileOp.wFunc = FO_DELETE;
-    FileOp.pFrom = pwszPaths;
-    FileOp.fFlags = FOF_ALLOWUNDO;
-
-    if (SHFileOperationW(&FileOp) != 0)
-    {
-        ERR("SHFileOperation failed with 0x%x for %s\n", GetLastError(),
debugstr_w(pwszPaths));
-        hr = E_FAIL;
-    }
-
-    HeapFree(GetProcessHeap(), 0, pwszPaths);
-    SHFree(pidl);
-    _ILFreeaPidl(apidl, lpcida->cidl);
-    ReleaseStgMedium(&medium);
-
-    return hr;
-}
-
-/*************************************************************************
- *              SHEmptyRecycleBinA (SHELL32.@)
- */
-HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags)
-{
-    LPWSTR szRootPathW = NULL;
-    int len;
-    HRESULT hr;
-
-    TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_a(pszRootPath), dwFlags);
-
-    if (pszRootPath)
-    {
-        len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0);
-        if (len == 0)
-            return HRESULT_FROM_WIN32(GetLastError());
-        szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-        if (!szRootPathW)
-            return E_OUTOFMEMORY;
-        if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0)
-        {
-            HeapFree(GetProcessHeap(), 0, szRootPathW);
-            return HRESULT_FROM_WIN32(GetLastError());
-        }
-    }
-
-    hr = SHEmptyRecycleBinW(hwnd, szRootPathW, dwFlags);
-    HeapFree(GetProcessHeap(), 0, szRootPathW);
-
-    return hr;
-}
-
-HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
-{
-    WCHAR szPath[MAX_PATH] = {0}, szBuffer[MAX_PATH];
-    DWORD dwSize, dwType, count;
-    LONG ret;
-    IShellFolder *pDesktop, *pRecycleBin;
-    PIDLIST_ABSOLUTE pidlRecycleBin;
-    PITEMID_CHILD pidl;
-    HRESULT hr = S_OK;
-    LPENUMIDLIST penumFiles;
-    STRRET StrRet;
-
-    TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_w(pszRootPath), dwFlags);
-
-    if (!(dwFlags & SHERB_NOCONFIRMATION))
-    {
-        hr = SHGetDesktopFolder(&pDesktop);
-        if (FAILED(hr))
-            return hr;
-        hr = SHGetFolderLocation(NULL, CSIDL_BITBUCKET, NULL, 0, &pidlRecycleBin);
-        if (FAILED(hr))
-        {
-            pDesktop->Release();
-            return hr;
-        }
-        hr = pDesktop->BindToObject(pidlRecycleBin, NULL, IID_PPV_ARG(IShellFolder,
&pRecycleBin));
-        CoTaskMemFree(pidlRecycleBin);
-        pDesktop->Release();
-        if (FAILED(hr))
-            return hr;
-        hr = pRecycleBin->EnumObjects(hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS |
SHCONTF_INCLUDEHIDDEN, &penumFiles);
-        if (FAILED(hr))
-        {
-            pRecycleBin->Release();
-            return hr;
-        }
-
-        count = 0;
-        if (hr != S_FALSE)
-        {
-            while (penumFiles->Next(1, &pidl, NULL) == S_OK)
-            {
-                count++;
-                pRecycleBin->GetDisplayNameOf(pidl, SHGDN_NORMAL, &StrRet);
-                StrRetToBuf(&StrRet, pidl, szBuffer, _countof(szBuffer));
-                CoTaskMemFree(pidl);
-            }
-            penumFiles->Release();
-        }
-        pRecycleBin->Release();
-
-        switch (count)
-        {
-            case 0:
-                /* no files, don't need confirmation */
-                break;
-
-            case 1:
-                /* we have only one item inside the bin, so show a message box with its
name */
-                if (ShellMessageBoxW(shell32_hInstance, hwnd,
MAKEINTRESOURCEW(IDS_DELETEITEM_TEXT), MAKEINTRESOURCEW(IDS_EMPTY_BITBUCKET),
-                                   MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2,
szBuffer) == IDNO)
-                {
-                    return S_OK;
-                }
-                break;
-
-            default:
-                /* we have more than one item, so show a message box with the count of
the items */
-                StringCbPrintfW(szBuffer, sizeof(szBuffer), L"%u", count);
-                if (ShellMessageBoxW(shell32_hInstance, hwnd,
MAKEINTRESOURCEW(IDS_DELETEMULTIPLE_TEXT), MAKEINTRESOURCEW(IDS_EMPTY_BITBUCKET),
-                                   MB_ICONEXCLAMATION | MB_YESNO | MB_DEFBUTTON2,
szBuffer) == IDNO)
-                {
-                    return S_OK;
-                }
-                break;
-        }
-    }
-
-    if (dwFlags & SHERB_NOPROGRESSUI)
-    {
-        ret = EmptyRecycleBinW(pszRootPath);
-    }
-    else
-    {
-       /* FIXME
-        * show a progress dialog
-        */
-        ret = EmptyRecycleBinW(pszRootPath);
-    }
-
-    if (!ret)
-        return HRESULT_FROM_WIN32(GetLastError());
-
-    if (!(dwFlags & SHERB_NOSOUND))
-    {
-        dwSize = sizeof(szPath);
-        ret = RegGetValueW(HKEY_CURRENT_USER,
-
L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current",
-                           NULL,
-                           RRF_RT_REG_SZ,
-                           &dwType,
-                           (PVOID)szPath,
-                           &dwSize);
-        if (ret != ERROR_SUCCESS)
-            return S_OK;
-
-        if (dwType != REG_EXPAND_SZ) /* type dismatch */
-            return S_OK;
-
-        szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0';
-        PlaySoundW(szPath, NULL, SND_FILENAME);
-    }
-    return S_OK;
-}
-
-HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
-{
-    LPWSTR szRootPathW = NULL;
-    int len;
-    HRESULT hr;
-
-    TRACE("%s, %p\n", debugstr_a(pszRootPath), pSHQueryRBInfo);
-
-    if (pszRootPath)
-    {
-        len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0);
-        if (len == 0)
-            return HRESULT_FROM_WIN32(GetLastError());
-        szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
-        if (!szRootPathW)
-            return E_OUTOFMEMORY;
-        if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0)
-        {
-            HeapFree(GetProcessHeap(), 0, szRootPathW);
-            return HRESULT_FROM_WIN32(GetLastError());
-        }
-    }
-
-    hr = SHQueryRecycleBinW(szRootPathW, pSHQueryRBInfo);
-    HeapFree(GetProcessHeap(), 0, szRootPathW);
-
-    return hr;
-}
-
-HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
-{
-    FIXME("%s, %p - stub\n", debugstr_w(pszRootPath), pSHQueryRBInfo);
-
-    if (!(pszRootPath) || (pszRootPath[0] == 0) ||
-        !(pSHQueryRBInfo) || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO)))
-    {
-        return E_INVALIDARG;
-    }
-
-    pSHQueryRBInfo->i64Size = 0;
-    pSHQueryRBInfo->i64NumItems = 0;
-
-    return S_OK;
-}
Modified: trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/folders/…
==============================================================================
--- trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp     [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/folders/CRecycleBin.cpp     [iso-8859-1] Wed Aug 19
18:10:30 2015
@@ -110,13 +110,6 @@
     HANDLE hDeletedFile;
     BOOL bFound;
 } SEARCH_CONTEXT, *PSEARCH_CONTEXT;
-
-typedef struct
-{
-    DWORD dwNukeOnDelete;
-    DWORD dwSerial;
-    DWORD dwMaxCapacity;
-} DRIVE_ITEM_CONTEXT, *PDRIVE_ITEM_CONTEXT;
 BOOL WINAPI CBSearchRecycleBin(IN PVOID Context, IN HANDLE hDeletedFile)
 {
@@ -869,388 +862,6 @@
     return S_OK;
 }
-void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable)
-{
-    if (bEnable)
-    {
-        SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_UNCHECKED, 0);
-        EnableWindow(GetDlgItem(hwndDlg, 14002), FALSE);
-        SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0);
-    }
-    else
-    {
-        SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_CHECKED, 0);
-        EnableWindow(GetDlgItem(hwndDlg, 14002), TRUE);
-        SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_UNCHECKED, 0);
-    }
-}
-
-
-static VOID
-InitializeRecycleBinDlg(HWND hwndDlg, WCHAR DefaultDrive)
-{
-    WCHAR CurDrive = L'A';
-    WCHAR szDrive[] = L"A:\\";
-    DWORD dwDrives;
-    WCHAR szName[100];
-    WCHAR szVolume[100];
-    DWORD MaxComponent, Flags;
-    DWORD dwSerial;
-    LVCOLUMNW lc;
-    HWND hDlgCtrl;
-    LVITEMW li;
-    INT itemCount;
-    ULARGE_INTEGER TotalNumberOfFreeBytes, TotalNumberOfBytes, FreeBytesAvailable;
-    RECT rect;
-    int columnSize;
-    int defIndex = 0;
-    DWORD dwSize;
-    PDRIVE_ITEM_CONTEXT pItem = NULL, pDefault = NULL, pFirst = NULL;
-
-    hDlgCtrl = GetDlgItem(hwndDlg, 14000);
-
-    if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_LOCATION, szVolume,
sizeof(szVolume) / sizeof(WCHAR)))
-        szVolume[0] = 0;
-
-    GetClientRect(hDlgCtrl, &rect);
-
-    memset(&lc, 0, sizeof(LV_COLUMN) );
-    lc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT;
-
-    columnSize = 140; //FIXME
-    lc.iSubItem   = 0;
-    lc.fmt = LVCFMT_FIXED_WIDTH;
-    lc.cx         = columnSize;
-    lc.cchTextMax = wcslen(szVolume);
-    lc.pszText    = szVolume;
-    (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 0, (LPARAM)&lc);
-
-    if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_DISKSPACE, szVolume,
sizeof(szVolume) / sizeof(WCHAR)))
-        szVolume[0] = 0;
-
-    lc.iSubItem   = 1;
-    lc.cx         = rect.right - rect.left - columnSize;
-    lc.cchTextMax = wcslen(szVolume);
-    lc.pszText    = szVolume;
-    (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, 1, (LPARAM)&lc);
-
-    dwDrives = GetLogicalDrives();
-    itemCount = 0;
-    do
-    {
-        if ((dwDrives & 0x1))
-        {
-            UINT Type = GetDriveTypeW(szDrive);
-            if (Type == DRIVE_FIXED) //FIXME
-            {
-                if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) /
sizeof(WCHAR), &dwSerial, &MaxComponent, &Flags, NULL, 0))
-                {
-                    szName[0] = 0;
-                    dwSerial = -1;
-                }
-
-                swprintf(szVolume, L"%s (%c:)", szName, szDrive[0]);
-                memset(&li, 0x0, sizeof(LVITEMW));
-                li.mask = LVIF_TEXT | LVIF_PARAM;
-                li.iSubItem = 0;
-                li.pszText = szVolume;
-                li.iItem = itemCount;
-                SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li);
-                if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable ,
&TotalNumberOfBytes, &TotalNumberOfFreeBytes))
-                {
-                    if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume,
sizeof(szVolume) / sizeof(WCHAR)))
-                    {
-
-                        pItem = (DRIVE_ITEM_CONTEXT *)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY, sizeof(DRIVE_ITEM_CONTEXT));
-                        if (pItem)
-                        {
-                            swprintf(szName,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\%04X-%04X",
LOWORD(dwSerial), HIWORD(dwSerial));
-                            dwSize = sizeof(DWORD);
-                            RegGetValueW(HKEY_CURRENT_USER, szName,
L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize);
-                            dwSize = sizeof(DWORD);
-                            RegGetValueW(HKEY_CURRENT_USER, szName,
L"NukeOnDelete", RRF_RT_DWORD, NULL, &pItem->dwNukeOnDelete,
&dwSize);
-                            pItem->dwSerial = dwSerial;
-                            li.mask = LVIF_PARAM;
-                            li.lParam = (LPARAM)pItem;
-                            (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0,
(LPARAM)&li);
-                            if (CurDrive == DefaultDrive)
-                            {
-                                defIndex = itemCount;
-                                pDefault = pItem;
-                            }
-                        }
-                        if (!pFirst)
-                            pFirst = pItem;
-
-                        li.mask = LVIF_TEXT;
-                        li.iSubItem = 1;
-                        li.pszText = szVolume;
-                        li.iItem = itemCount;
-                        (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
-                    }
-                }
-                itemCount++;
-            }
-        }
-        CurDrive++;
-        szDrive[0] = CurDrive;
-        dwDrives = (dwDrives >> 1);
-    } while(dwDrives);
-
-    if (!pDefault)
-        pDefault = pFirst;
-    if (pDefault)
-    {
-        toggleNukeOnDeleteOption(hwndDlg, pDefault->dwNukeOnDelete);
-        SetDlgItemInt(hwndDlg, 14002, pDefault->dwMaxCapacity, FALSE);
-    }
-    ZeroMemory(&li, sizeof(li));
-    li.mask = LVIF_STATE;
-    li.stateMask = (UINT) - 1;
-    li.state = LVIS_FOCUSED | LVIS_SELECTED;
-    li.iItem = defIndex;
-    (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
-
-}
-
-static BOOL StoreDriveSettings(HWND hwndDlg)
-{
-    int iCount, iIndex;
-    HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000);
-    LVITEMW li;
-    PDRIVE_ITEM_CONTEXT pItem;
-    HKEY hKey, hSubKey;
-    WCHAR szSerial[20];
-    DWORD dwSize;
-
-
-    if (RegCreateKeyExW(HKEY_CURRENT_USER,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume", 0,
NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS)
-        return FALSE;
-
-    iCount = ListView_GetItemCount(hDlgCtrl);
-
-    ZeroMemory(&li, sizeof(li));
-    li.mask = LVIF_PARAM;
-
-    for(iIndex = 0; iIndex < iCount; iIndex++)
-    {
-        li.iItem = iIndex;
-        if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)&li))
-        {
-            pItem = (PDRIVE_ITEM_CONTEXT)li.lParam;
-            swprintf(szSerial, L"%04X-%04X", LOWORD(pItem->dwSerial),
HIWORD(pItem->dwSerial));
-            if (RegCreateKeyExW(hKey, szSerial, 0, NULL, 0, KEY_WRITE, NULL,
&hSubKey, NULL) == ERROR_SUCCESS)
-            {
-                dwSize = sizeof(DWORD);
-                RegSetValueExW(hSubKey, L"NukeOnDelete", 0, REG_DWORD,
(LPBYTE)&pItem->dwNukeOnDelete, dwSize);
-                dwSize = sizeof(DWORD);
-                RegSetValueExW(hSubKey, L"MaxCapacity", 0, REG_DWORD,
(LPBYTE)&pItem->dwMaxCapacity, dwSize);
-                RegCloseKey(hSubKey);
-            }
-        }
-    }
-    RegCloseKey(hKey);
-    return TRUE;
-
-}
-
-static VOID FreeDriveItemContext(HWND hwndDlg)
-{
-    int iCount, iIndex;
-    HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000);
-    LVITEMW li;
-
-    iCount = ListView_GetItemCount(hDlgCtrl);
-
-    ZeroMemory(&li, sizeof(li));
-    li.mask = LVIF_PARAM;
-
-    for(iIndex = 0; iIndex < iCount; iIndex++)
-    {
-        li.iItem = iIndex;
-        if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)&li))
-        {
-            HeapFree(GetProcessHeap(), 0, (LPVOID)li.lParam);
-        }
-    }
-}
-
-static INT
-GetDefaultItem(HWND hwndDlg, LVITEMW * li)
-{
-    HWND hDlgCtrl;
-    UINT iItemCount, iIndex;
-
-    hDlgCtrl = GetDlgItem(hwndDlg, 14000);
-    if (!hDlgCtrl)
-        return -1;
-
-    iItemCount = ListView_GetItemCount(hDlgCtrl);
-    if (!iItemCount)
-        return -1;
-
-    ZeroMemory(li, sizeof(LVITEMW));
-    li->mask = LVIF_PARAM | LVIF_STATE;
-    li->stateMask = (UINT) - 1;
-    for (iIndex = 0; iIndex < iItemCount; iIndex++)
-    {
-        li->iItem = iIndex;
-        if (SendMessageW(hDlgCtrl, LVM_GETITEMW, 0, (LPARAM)li))
-        {
-            if (li->state & LVIS_SELECTED)
-                return iIndex;
-        }
-    }
-    return -1;
-
-}
-
-static INT_PTR CALLBACK
-RecycleBinDlg(
-    HWND hwndDlg,
-    UINT uMsg,
-    WPARAM wParam,
-    LPARAM lParam
-)
-{
-    LPPSHNOTIFY lppsn;
-    LPNMLISTVIEW lppl;
-    LVITEMW li;
-    PDRIVE_ITEM_CONTEXT pItem;
-    BOOL bSuccess;
-    UINT uResult;
-    PROPSHEETPAGE * page;
-    DWORD dwStyle;
-
-    switch(uMsg)
-    {
-        case WM_INITDIALOG:
-            page = (PROPSHEETPAGE*)lParam;
-            InitializeRecycleBinDlg(hwndDlg, (WCHAR)page->lParam);
-            dwStyle = (DWORD) SendDlgItemMessage(hwndDlg, 14000,
LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
-            dwStyle = dwStyle | LVS_EX_FULLROWSELECT;
-            SendDlgItemMessage(hwndDlg, 14000, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle);
-            if (GetDlgCtrlID((HWND)wParam) != 14000)
-            {
-                SetFocus(GetDlgItem(hwndDlg, 14000));
-                return FALSE;
-            }
-            return TRUE;
-        case WM_COMMAND:
-            switch(LOWORD(wParam))
-            {
-                case 14001:
-                    toggleNukeOnDeleteOption(hwndDlg, FALSE);
-                    PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
-                    break;
-                case 14003:
-                    toggleNukeOnDeleteOption(hwndDlg, TRUE);
-                    PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
-                    break;
-                case 14004:
-                    PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
-                    break;
-            }
-            break;
-        case WM_NOTIFY:
-            lppsn = (LPPSHNOTIFY) lParam;
-            lppl = (LPNMLISTVIEW) lParam;
-            if (lppsn->hdr.code == PSN_APPLY)
-            {
-                if (GetDefaultItem(hwndDlg, &li) > -1)
-                {
-                    pItem = (PDRIVE_ITEM_CONTEXT)li.lParam;
-                    if (pItem)
-                    {
-                        uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE);
-                        if (bSuccess)
-                            pItem->dwMaxCapacity = uResult;
-                        if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) ==
BST_CHECKED)
-                            pItem->dwNukeOnDelete = TRUE;
-                        else
-                            pItem->dwNukeOnDelete = FALSE;
-                    }
-                }
-                if (StoreDriveSettings(hwndDlg))
-                {
-                    SetWindowLongPtr( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR );
-                    return TRUE;
-                }
-            }
-            else if (lppl->hdr.code == LVN_ITEMCHANGING)
-            {
-                ZeroMemory(&li, sizeof(li));
-                li.mask = LVIF_PARAM;
-                li.iItem = lppl->iItem;
-                if (!SendMessageW(lppl->hdr.hwndFrom, LVM_GETITEMW, 0,
(LPARAM)&li))
-                    return TRUE;
-
-                pItem = (PDRIVE_ITEM_CONTEXT)li.lParam;
-                if (!pItem)
-                    return TRUE;
-
-                if (!(lppl->uOldState & LVIS_FOCUSED) &&
(lppl->uNewState & LVIS_FOCUSED))
-                {
-                    /* new focused item */
-                    toggleNukeOnDeleteOption(lppl->hdr.hwndFrom,
pItem->dwNukeOnDelete);
-                    SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE);
-                }
-                else if ((lppl->uOldState & LVIS_FOCUSED) &&
!(lppl->uNewState & LVIS_FOCUSED))
-                {
-                    /* kill focus */
-                    uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE);
-                    if (bSuccess)
-                        pItem->dwMaxCapacity = uResult;
-                    if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) ==
BST_CHECKED)
-                        pItem->dwNukeOnDelete = TRUE;
-                    else
-                        pItem->dwNukeOnDelete = FALSE;
-                }
-                return TRUE;
-
-            }
-            break;
-        case WM_DESTROY:
-            FreeDriveItemContext(hwndDlg);
-            break;
-    }
-    return FALSE;
-}
-
-BOOL SH_ShowRecycleBinProperties(WCHAR sDrive)
-{
-    HPROPSHEETPAGE hpsp[1];
-    PROPSHEETHEADERW psh;
-    HPROPSHEETPAGE hprop;
-
-    BOOL ret;
-
-
-    ZeroMemory(&psh, sizeof(PROPSHEETHEADERW));
-    psh.dwSize = sizeof(PROPSHEETHEADERW);
-    psh.dwFlags = PSP_DEFAULT | PSH_PROPTITLE;
-    psh.pszCaption = MAKEINTRESOURCEW(IDS_RECYCLEBIN_FOLDER_NAME);
-    psh.hwndParent = NULL;
-    psh.phpage = hpsp;
-    psh.hInstance = shell32_hInstance;
-
-    hprop = SH_CreatePropertySheetPage(IDD_RECYCLE_BIN_PROPERTIES, RecycleBinDlg,
(LPARAM)sDrive, NULL);
-    if (!hprop)
-    {
-        ERR("Failed to create property sheet\n");
-        return FALSE;
-    }
-    hpsp[psh.nPages] = hprop;
-    psh.nPages++;
-
-
-    ret = PropertySheetW(&psh);
-    if (ret < 0)
-        return FALSE;
-    else
-        return TRUE;
-}
-
 BOOL
 TRASH_CanTrashFile(LPCWSTR wszPath)
 {