Author: dquintana
Date: Wed Jul  9 23:37:02 2014
New Revision: 63704

URL: http://svn.reactos.org/svn/reactos?rev=63704&view=rev
Log:
[RSHELL]
* Filter out the Programs item from the top list.

Modified:
    branches/shell-experiments/base/shell/rshell/CMenuToolbars.cpp
    branches/shell-experiments/base/shell/rshell/CStartMenu.cpp

Modified: branches/shell-experiments/base/shell/rshell/CMenuToolbars.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/rshell/CMenuToolbars.cpp?rev=63704&r1=63703&r2=63704&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/rshell/CMenuToolbars.cpp      
[iso-8859-1] (original)
+++ branches/shell-experiments/base/shell/rshell/CMenuToolbars.cpp      
[iso-8859-1] Wed Jul  9 23:37:02 2014
@@ -1285,29 +1285,37 @@
         INT index = 0;
         INT indexOpen = 0;
 
-        STRRET sr = { STRRET_CSTR, { 0 } };
-
-        hr = m_shellFolder->GetDisplayNameOf(item, SIGDN_NORMALDISPLAY, &sr);
-        if (FAILED_UNEXPECTEDLY(hr))
-            return hr;
-
-        StrRetToStr(&sr, NULL, &MenuString);
-
-        index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, 
&indexOpen);
-
-        LPCITEMIDLIST itemc = item;
-
-        SFGAOF attrs = SFGAO_FOLDER;
-        hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
-
-        DWORD_PTR dwData = reinterpret_cast<DWORD_PTR>(ILClone(item));
-
-        // Fetch next item already, so we know if the current one is the last
-        hr = eidl->Next(1, &item, NULL);
-
-        AddButton(++i, MenuString, attrs & SFGAO_FOLDER, index, dwData, hr != 
S_OK);
-
-        CoTaskMemFree(MenuString);
+        if (m_menuBand->_CallCBWithItemPidl(item, 0x10000000, 0, 0) == S_OK)
+        {
+            STRRET sr = { STRRET_CSTR, { 0 } };
+
+            hr = m_shellFolder->GetDisplayNameOf(item, SIGDN_NORMALDISPLAY, 
&sr);
+            if (FAILED_UNEXPECTEDLY(hr))
+                return hr;
+
+            StrRetToStr(&sr, NULL, &MenuString);
+
+            index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, 
&indexOpen);
+
+            LPCITEMIDLIST itemc = item;
+
+            SFGAOF attrs = SFGAO_FOLDER;
+            hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
+
+            DWORD_PTR dwData = reinterpret_cast<DWORD_PTR>(ILClone(item));
+
+            // Fetch next item already, so we know if the current one is the 
last
+            hr = eidl->Next(1, &item, NULL);
+
+            AddButton(++i, MenuString, attrs & SFGAO_FOLDER, index, dwData, hr 
!= S_OK);
+
+            CoTaskMemFree(MenuString);
+        }
+        else
+        {
+            // Fetch next item here also
+            hr = eidl->Next(1, &item, NULL);
+        }
     }
     ILFree(item);
 

Modified: branches/shell-experiments/base/shell/rshell/CStartMenu.cpp
URL: 
http://svn.reactos.org/svn/reactos/branches/shell-experiments/base/shell/rshell/CStartMenu.cpp?rev=63704&r1=63703&r2=63704&view=diff
==============================================================================
--- branches/shell-experiments/base/shell/rshell/CStartMenu.cpp [iso-8859-1] 
(original)
+++ branches/shell-experiments/base/shell/rshell/CStartMenu.cpp [iso-8859-1] 
Wed Jul  9 23:37:02 2014
@@ -65,7 +65,9 @@
     CComPtr<IBandSite> m_pBandSite;
     CComPtr<IDeskBar> m_pDeskBar;
     CComPtr<ITrayPriv> m_pTrayPriv;
-    CComPtr<IShellFolder> m_programsFolder;
+    CComPtr<IShellFolder> m_psfPrograms;
+    
+    LPITEMIDLIST m_pidlPrograms;
 
     HRESULT OnInitMenu()
     {
@@ -161,9 +163,9 @@
         {
             IShellFolder *psfStartMenu;
 
-            if (csidl == CSIDL_PROGRAMS && m_programsFolder)
+            if (csidl == CSIDL_PROGRAMS && m_psfPrograms)
             {
-                psfStartMenu = m_programsFolder;
+                psfStartMenu = m_psfPrograms;
             }
             else
             {
@@ -251,9 +253,10 @@
         m_pDeskBar.Release();
     }
 
-    HRESULT _SetProgramsFolder(IShellFolder * programs)
-    {
-        m_programsFolder = programs;
+    HRESULT _SetProgramsFolder(IShellFolder * psf, LPITEMIDLIST pidl)
+    {
+        m_psfPrograms = psf;
+        m_pidlPrograms = pidl;
         return S_OK;
     }
 
@@ -276,6 +279,10 @@
         case SMC_SFEXEC:
             m_pTrayPriv->Execute(psmd->psf, psmd->pidlItem);
             break;
+        case 0x10000000: // _FilterPIDL from CMenuSFToolbar
+            if (psmd->psf->CompareIDs(0, psmd->pidlItem, m_pidlPrograms) == 0)
+                return S_FALSE;
+            return S_OK;
         }
 
         return S_FALSE;
@@ -312,9 +319,9 @@
 
     if (FAILED(SHGetSpecialFolderLocation(NULL, CSIDL_COMMON_STARTMENU, 
&pidlCommonStartMenu)))
     {
-        BindToDesktop(pidlUserStartMenu, ppsfStartMenu);
+        hr = BindToDesktop(pidlUserStartMenu, ppsfStartMenu);
         ILFree(pidlUserStartMenu);
-        return S_OK;
+        return hr;
     }
 
     CComPtr<IShellFolder> psfUserStartMenu;
@@ -337,10 +344,10 @@
     hr = CoCreateInstance(CLSID_MergedFolder, NULL, CLSCTX_INPROC_SERVER, 
IID_PPV_ARG(IAugmentedShellFolder, &pasf));
     if (FAILED_UNEXPECTEDLY(hr))
     {
-        BindToDesktop(pidlUserStartMenu, ppsfStartMenu);
+        hr = BindToDesktop(pidlUserStartMenu, ppsfStartMenu);
         ILFree(pidlCommonStartMenu);
         ILFree(pidlUserStartMenu);
-        return S_OK;
+        return hr;
     }
 
     hr = pasf->AddNameSpace(NULL, psfUserStartMenu, pidlUserStartMenu, 0xFF00);
@@ -410,7 +417,7 @@
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
 
-    hr = pCallback->_SetProgramsFolder(psfPrograms);
+    hr = pCallback->_SetProgramsFolder(psfPrograms, pidlPrograms);
     if (FAILED_UNEXPECTEDLY(hr))
         return hr;
 


Reply via email to