mirror of
https://github.com/reactos/reactos.git
synced 2026-06-03 17:59:48 +08:00
[SHELL32] Start Menu: Enhance context menu (#6606)
Improve Start Menu usability. JIRA issue: CORE-19477 - Add CSIDLFromID helper function. - Return a context menu interface at CShellMenuCallback::OnGetContextMenu. FIXME: CSIDL_CONTROLS, CSIDL_NETWORK, and CSIDL_PRINTERS context menu wrongly open My Computer.
This commit is contained in:
committed by
GitHub
parent
7b304b5b86
commit
5aaead3fdb
@@ -292,8 +292,13 @@ private:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_FAVORITES:
|
case IDM_FAVORITES:
|
||||||
|
case IDM_MYDOCUMENTS:
|
||||||
|
case IDM_MYPICTURES:
|
||||||
|
case IDM_CONTROLPANEL:
|
||||||
|
case IDM_NETWORKCONNECTIONS:
|
||||||
|
case IDM_PRINTERSANDFAXES:
|
||||||
{
|
{
|
||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_FAVORITES, SMSET_TOP);
|
hr = AddStartMenuItems(pShellMenu, CSIDLFromID(psmd->uId), SMSET_TOP);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_DOCUMENTS:
|
case IDM_DOCUMENTS:
|
||||||
@@ -309,31 +314,6 @@ private:
|
|||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_RECENT, SMSET_BOTTOM);
|
hr = AddStartMenuItems(pShellMenu, CSIDL_RECENT, SMSET_BOTTOM);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IDM_MYDOCUMENTS:
|
|
||||||
{
|
|
||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_MYDOCUMENTS, SMSET_TOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IDM_MYPICTURES:
|
|
||||||
{
|
|
||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_MYPICTURES, SMSET_TOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IDM_CONTROLPANEL:
|
|
||||||
{
|
|
||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_CONTROLS, SMSET_TOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IDM_NETWORKCONNECTIONS:
|
|
||||||
{
|
|
||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_NETWORK, SMSET_TOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IDM_PRINTERSANDFAXES:
|
|
||||||
{
|
|
||||||
hr = AddStartMenuItems(pShellMenu, CSIDL_PRINTERS, SMSET_TOP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IDM_SETTINGS:
|
case IDM_SETTINGS:
|
||||||
{
|
{
|
||||||
MENUITEMINFOW mii = { sizeof(mii), MIIM_SUBMENU };
|
MENUITEMINFOW mii = { sizeof(mii), MIIM_SUBMENU };
|
||||||
@@ -367,17 +347,43 @@ private:
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
INT CSIDLFromID(UINT uId) const
|
||||||
|
{
|
||||||
|
switch (uId)
|
||||||
|
{
|
||||||
|
case IDM_PROGRAMS: return CSIDL_PROGRAMS;
|
||||||
|
case IDM_FAVORITES: return CSIDL_FAVORITES;
|
||||||
|
case IDM_DOCUMENTS: return CSIDL_RECENT;
|
||||||
|
case IDM_MYDOCUMENTS: return CSIDL_MYDOCUMENTS;
|
||||||
|
case IDM_MYPICTURES: return CSIDL_MYPICTURES;
|
||||||
|
case IDM_CONTROLPANEL: return CSIDL_CONTROLS;
|
||||||
|
case IDM_NETWORKCONNECTIONS: return CSIDL_NETWORK;
|
||||||
|
case IDM_PRINTERSANDFAXES: return CSIDL_PRINTERS;
|
||||||
|
default: return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT OnGetContextMenu(LPSMDATA psmd, REFIID iid, void ** pv)
|
HRESULT OnGetContextMenu(LPSMDATA psmd, REFIID iid, void ** pv)
|
||||||
{
|
{
|
||||||
if (psmd->uId == IDM_PROGRAMS ||
|
INT csidl = CSIDLFromID(psmd->uId);
|
||||||
psmd->uId == IDM_CONTROLPANEL ||
|
if (!csidl)
|
||||||
psmd->uId == IDM_NETWORKCONNECTIONS ||
|
return S_FALSE;
|
||||||
psmd->uId == IDM_PRINTERSANDFAXES)
|
|
||||||
{
|
|
||||||
//UNIMPLEMENTED
|
|
||||||
}
|
|
||||||
|
|
||||||
return S_FALSE;
|
TRACE("csidl: 0x%X\n", csidl);
|
||||||
|
|
||||||
|
if (csidl == CSIDL_CONTROLS || csidl == CSIDL_NETWORK || csidl == CSIDL_PRINTERS)
|
||||||
|
FIXME("This CSIDL %d wrongly opens My Computer. CORE-19477\n", csidl);
|
||||||
|
|
||||||
|
CComHeapPtr<ITEMIDLIST> pidl;
|
||||||
|
SHGetSpecialFolderLocation(NULL, csidl, &pidl);
|
||||||
|
|
||||||
|
CComPtr<IShellFolder> pSF;
|
||||||
|
LPCITEMIDLIST pidlChild = NULL;
|
||||||
|
HRESULT hr = SHBindToParent(pidl, IID_IShellFolder, (void**)&pSF, &pidlChild);
|
||||||
|
if (FAILED(hr))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
return pSF->GetUIObjectOf(NULL, 1, &pidlChild, IID_IContextMenu, NULL, pv);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT OnGetObject(LPSMDATA psmd, REFIID iid, void ** pv)
|
HRESULT OnGetObject(LPSMDATA psmd, REFIID iid, void ** pv)
|
||||||
|
|||||||
Reference in New Issue
Block a user