[BROWSEUI] CBandSiteMenu

- Move SHGetFolder code to CreateBuiltInISFBand
- Get rid of CSIDL_FLAG_CREATE (Windows doesn't create Quick Launch
directory)
- Use ILFree since variables are reused now
This commit is contained in:
Stas'M 2017-11-01 23:05:33 +03:00 committed by Giannis Adamopoulos
parent 275ab7ba2f
commit 484f33f0d3
2 changed files with 48 additions and 15 deletions

View file

@ -48,19 +48,6 @@ CBandSiteMenu::~CBandSiteMenu()
HRESULT WINAPI CBandSiteMenu::FinalConstruct() HRESULT WINAPI CBandSiteMenu::FinalConstruct()
{ {
HRESULT hr = SHGetFolderLocation(0, CSIDL_DESKTOP, NULL, 0, &m_DesktopPidl);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
WCHAR buffer[MAX_PATH];
hr = SHGetFolderPathAndSubDirW(0, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, L"Microsoft\\Internet Explorer\\Quick Launch", buffer);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
m_QLaunchPidl.Attach(ILCreateFromPathW(buffer));
if (m_QLaunchPidl == NULL)
return E_FAIL;
return S_OK; return S_OK;
} }
@ -150,12 +137,53 @@ HRESULT CBandSiteMenu::_CreateNewISFBand(HWND hwnd, REFIID riid, void** ppv)
return pISFB->QueryInterface(riid, ppv); return pISFB->QueryInterface(riid, ppv);
} }
LPITEMIDLIST CBandSiteMenu::_GetQLaunchPidl(BOOL refresh)
{
if (m_QLaunchPidl != NULL)
{
if (refresh)
m_QLaunchPidl.Free();
else
return m_QLaunchPidl;
}
WCHAR buffer[MAX_PATH];
HRESULT hr = SHGetFolderPathAndSubDirW(0, CSIDL_APPDATA, NULL, 0, L"Microsoft\\Internet Explorer\\Quick Launch", buffer);
if (FAILED_UNEXPECTEDLY(hr))
return NULL;
m_QLaunchPidl.Attach(ILCreateFromPathW(buffer));
return m_QLaunchPidl;
}
HRESULT CBandSiteMenu::_CreateBuiltInISFBand(UINT uID, REFIID riid, void** ppv) HRESULT CBandSiteMenu::_CreateBuiltInISFBand(UINT uID, REFIID riid, void** ppv)
{ {
LPITEMIDLIST pidl; LPITEMIDLIST pidl;
HRESULT hr; HRESULT hr;
pidl = (uID == IDM_TASKBAR_TOOLBARS_DESKTOP) ? m_DesktopPidl : m_QLaunchPidl; switch (uID)
{
case IDM_TASKBAR_TOOLBARS_DESKTOP:
{
if (m_DesktopPidl != NULL)
m_DesktopPidl.Free();
hr = SHGetFolderLocation(0, CSIDL_DESKTOP, NULL, 0, &m_DesktopPidl);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
pidl = m_DesktopPidl;
break;
}
case IDM_TASKBAR_TOOLBARS_QUICKLAUNCH:
{
pidl = _GetQLaunchPidl(true);
break;
}
}
if (pidl == NULL)
return E_FAIL;
CComPtr<IShellFolderBand> pISFB; CComPtr<IShellFolderBand> pISFB;
hr = CISFBand_CreateInstance(IID_IShellFolderBand, (PVOID*)&pISFB); hr = CISFBand_CreateInstance(IID_IShellFolderBand, (PVOID*)&pISFB);
@ -238,7 +266,11 @@ UINT CBandSiteMenu::_GetMenuIdFromISFBand(IUnknown *pBand)
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return UINT_MAX; return UINT_MAX;
hr = psfDesktop->CompareIDs(0, pidl, m_QLaunchPidl); LPITEMIDLIST _QLaunchPidl = _GetQLaunchPidl(false);
if (_QLaunchPidl == NULL)
return UINT_MAX;
hr = psfDesktop->CompareIDs(0, pidl, _QLaunchPidl);
if (FAILED_UNEXPECTEDLY(hr)) if (FAILED_UNEXPECTEDLY(hr))
return UINT_MAX; return UINT_MAX;

View file

@ -36,6 +36,7 @@ class CBandSiteMenu :
HRESULT _CreateMenuPart(); HRESULT _CreateMenuPart();
HRESULT _CreateNewISFBand(HWND hwnd, REFIID riid, void** ppv); HRESULT _CreateNewISFBand(HWND hwnd, REFIID riid, void** ppv);
LPITEMIDLIST _GetQLaunchPidl(BOOL refresh);
HRESULT _CreateBuiltInISFBand(UINT uID, REFIID riid, void** ppv); HRESULT _CreateBuiltInISFBand(UINT uID, REFIID riid, void** ppv);
HRESULT _AddISFBandToMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, IUnknown* pBand, DWORD dwBandID, UINT *newMenuId); HRESULT _AddISFBandToMenu(HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, IUnknown* pBand, DWORD dwBandID, UINT *newMenuId);
UINT _GetMenuIdFromISFBand(IUnknown *pBand); UINT _GetMenuIdFromISFBand(IUnknown *pBand);