[SHELL32] Disable 'Empty Recycle Bin' when no items are present. By Mark Jansen....
authorAmine Khaldi <amine.khaldi@reactos.org>
Fri, 4 Dec 2015 11:12:01 +0000 (11:12 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Fri, 4 Dec 2015 11:12:01 +0000 (11:12 +0000)
svn path=/trunk/; revision=70264

reactos/dll/win32/shell32/folders/CRecycleBin.cpp
reactos/dll/win32/shell32/folders/CRecycleBin.h

index ae68c9f..4f901ce 100644 (file)
@@ -801,6 +801,17 @@ HRESULT WINAPI CRecycleBin::MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid)
     return S_OK;
 }
 
+BOOL CRecycleBin::RecycleBinIsEmpty()
+{
+    CComPtr<IEnumIDList> spEnumFiles;
+    HRESULT hr = EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &spEnumFiles);
+    if (FAILED(hr))
+        return TRUE;
+    CComHeapPtr<ITEMIDLIST> 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;
index ba32ff5..758860b 100644 (file)
@@ -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();