mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
[RSHELL]
* Filter out the Programs item from the top list. svn path=/branches/shell-experiments/; revision=63704
This commit is contained in:
parent
9804a12eff
commit
791ee3e755
2 changed files with 39 additions and 24 deletions
|
@ -1285,29 +1285,37 @@ HRESULT CMenuSFToolbar::FillToolbar(BOOL clearFirst)
|
|||
INT index = 0;
|
||||
INT indexOpen = 0;
|
||||
|
||||
STRRET sr = { STRRET_CSTR, { 0 } };
|
||||
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;
|
||||
hr = m_shellFolder->GetDisplayNameOf(item, SIGDN_NORMALDISPLAY, &sr);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
StrRetToStr(&sr, NULL, &MenuString);
|
||||
StrRetToStr(&sr, NULL, &MenuString);
|
||||
|
||||
index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, &indexOpen);
|
||||
index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, &indexOpen);
|
||||
|
||||
LPCITEMIDLIST itemc = item;
|
||||
LPCITEMIDLIST itemc = item;
|
||||
|
||||
SFGAOF attrs = SFGAO_FOLDER;
|
||||
hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
|
||||
SFGAOF attrs = SFGAO_FOLDER;
|
||||
hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
|
||||
|
||||
DWORD_PTR dwData = reinterpret_cast<DWORD_PTR>(ILClone(item));
|
||||
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);
|
||||
// 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);
|
||||
AddButton(++i, MenuString, attrs & SFGAO_FOLDER, index, dwData, hr != S_OK);
|
||||
|
||||
CoTaskMemFree(MenuString);
|
||||
CoTaskMemFree(MenuString);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Fetch next item here also
|
||||
hr = eidl->Next(1, &item, NULL);
|
||||
}
|
||||
}
|
||||
ILFree(item);
|
||||
|
||||
|
|
|
@ -65,7 +65,9 @@ private:
|
|||
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 @@ private:
|
|||
{
|
||||
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 @@ public:
|
|||
m_pDeskBar.Release();
|
||||
}
|
||||
|
||||
HRESULT _SetProgramsFolder(IShellFolder * programs)
|
||||
HRESULT _SetProgramsFolder(IShellFolder * psf, LPITEMIDLIST pidl)
|
||||
{
|
||||
m_programsFolder = programs;
|
||||
m_psfPrograms = psf;
|
||||
m_pidlPrograms = pidl;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -276,6 +279,10 @@ public:
|
|||
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 @@ HRESULT GetStartMenuFolder(IShellFolder ** ppsfStartMenu)
|
|||
|
||||
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 @@ HRESULT GetStartMenuFolder(IShellFolder ** ppsfStartMenu)
|
|||
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 @@ CStartMenu_Constructor(REFIID riid, void **ppv)
|
|||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
hr = pCallback->_SetProgramsFolder(psfPrograms);
|
||||
hr = pCallback->_SetProgramsFolder(psfPrograms, pidlPrograms);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
|
|
Loading…
Reference in a new issue