From 07cad9b0dda984ae4ebf8163eae8e95bba6e9d25 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 4 Dec 2015 11:12:01 +0000 Subject: [PATCH] [SHELL32] Disable 'Empty Recycle Bin' when no items are present. By Mark Jansen. CORE-10438 svn path=/trunk/; revision=70264 --- reactos/dll/win32/shell32/folders/CRecycleBin.cpp | 13 ++++++++++++- reactos/dll/win32/shell32/folders/CRecycleBin.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/shell32/folders/CRecycleBin.cpp b/reactos/dll/win32/shell32/folders/CRecycleBin.cpp index ae68c9fd660..4f901ce25a1 100644 --- a/reactos/dll/win32/shell32/folders/CRecycleBin.cpp +++ b/reactos/dll/win32/shell32/folders/CRecycleBin.cpp @@ -801,6 +801,17 @@ HRESULT WINAPI CRecycleBin::MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid) return S_OK; } +BOOL CRecycleBin::RecycleBinIsEmpty() +{ + CComPtr spEnumFiles; + HRESULT hr = EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &spEnumFiles); + if (FAILED(hr)) + return TRUE; + CComHeapPtr spPidl; + ULONG itemcount; + return spEnumFiles->Next(1, &spPidl, &itemcount) != S_OK; + } + /************************************************************************* * RecycleBin IContextMenu interface */ @@ -819,7 +830,7 @@ HRESULT WINAPI CRecycleBin::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT i memset(&mii, 0, sizeof(mii)); mii.cbSize = sizeof(mii); mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; - mii.fState = MFS_ENABLED; + mii.fState = RecycleBinIsEmpty() ? MFS_DISABLED : MFS_ENABLED; szBuffer[0] = L'\0'; LoadStringW(shell32_hInstance, IDS_EMPTY_BITBUCKET, szBuffer, sizeof(szBuffer) / sizeof(WCHAR)); mii.dwTypeData = szBuffer; diff --git a/reactos/dll/win32/shell32/folders/CRecycleBin.h b/reactos/dll/win32/shell32/folders/CRecycleBin.h index ba32ff54630..758860b955a 100644 --- a/reactos/dll/win32/shell32/folders/CRecycleBin.h +++ b/reactos/dll/win32/shell32/folders/CRecycleBin.h @@ -44,6 +44,7 @@ class CRecycleBin : void SF_RegisterClipFmt(); BOOL fAcceptFmt; /* flag for pending Drop */ BOOL QueryDrop (DWORD dwKeyState, LPDWORD pdwEffect); + BOOL RecycleBinIsEmpty(); public: CRecycleBin(); -- 2.17.1