[0.4.14][SHELL32] Improve StartButton context menu (#5008) CORE-16544

It regressed by the introduction of the SendTo-menu in:
0.4.14-dev-238-g 5308a606dc
Since then we had some unintended verbs in the start buttons context menu.

Fix that by *partially* porting back:
0.4.15-dev-5611-g 8e036fe74d [SHELL32] Improve StartButton context menu (#5008)
0.4.15-dev-5614-g f156f9a137 [SHELL32] Follow-up

I picked only the parts that I needed to hide the CSendToMenu, because the older branches do not
have the CCopyToMenu, CMoveToMenu. And I do not intend to ever add the new source files implementing them.
This commit is contained in:
Joachim Henze 2023-02-10 01:33:12 +01:00
parent 38dd7d8094
commit 1e4c5509f5
2 changed files with 10 additions and 9 deletions

View file

@ -50,7 +50,6 @@ struct _StaticInvokeCommandMap_
{ "rename", FCIDM_SHVIEW_RENAME},
};
class CDefaultContextMenu :
public CComObjectRootEx<CComMultiThreadModelNoCS>,
public IContextMenu3,
@ -85,7 +84,7 @@ class CDefaultContextMenu :
BOOL IsShellExtensionAlreadyLoaded(const CLSID *pclsid);
HRESULT LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *pclsid);
BOOL EnumerateDynamicContextHandlerForKey(HKEY hRootKey);
UINT AddShellExtensionsToMenu(HMENU hMenu, UINT* pIndexMenu, UINT idCmdFirst, UINT idCmdLast);
UINT AddShellExtensionsToMenu(HMENU hMenu, UINT* pIndexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags);
UINT AddStaticContextMenusToMenu(HMENU hMenu, UINT* IndexMenu, UINT iIdCmdFirst, UINT iIdCmdLast);
HRESULT DoPaste(LPCMINVOKECOMMANDINFO lpcmi, BOOL bLink);
HRESULT DoOpenOrExplore(LPCMINVOKECOMMANDINFO lpcmi);
@ -152,7 +151,6 @@ CDefaultContextMenu::CDefaultContextMenu() :
m_iIdCBLast(0),
m_iIdDfltFirst(0),
m_iIdDfltLast(0)
{
}
@ -348,7 +346,6 @@ HRESULT
CDefaultContextMenu::LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *pclsid)
{
HRESULT hr;
TRACE("LoadDynamicContextMenuHandler entered with This %p hKey %p pclsid %s\n", this, hKey, wine_dbgstr_guid(pclsid));
if (IsShellExtensionAlreadyLoaded(pclsid))
@ -470,7 +467,7 @@ CDefaultContextMenu::EnumerateDynamicContextHandlerForKey(HKEY hRootKey)
}
UINT
CDefaultContextMenu::AddShellExtensionsToMenu(HMENU hMenu, UINT* pIndexMenu, UINT idCmdFirst, UINT idCmdLast)
CDefaultContextMenu::AddShellExtensionsToMenu(HMENU hMenu, UINT* pIndexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
{
UINT cIds = 0;
@ -480,7 +477,7 @@ CDefaultContextMenu::AddShellExtensionsToMenu(HMENU hMenu, UINT* pIndexMenu, UIN
PDynamicShellEntry pEntry = m_pDynamicEntries;
do
{
HRESULT hr = pEntry->pCM->QueryContextMenu(hMenu, *pIndexMenu, idCmdFirst + cIds, idCmdLast, CMF_NORMAL);
HRESULT hr = pEntry->pCM->QueryContextMenu(hMenu, *pIndexMenu, idCmdFirst + cIds, idCmdLast, uFlags);
if (SUCCEEDED(hr))
{
pEntry->iIdCmdFirst = cIds;
@ -502,7 +499,7 @@ UINT
CDefaultContextMenu::AddStaticContextMenusToMenu(
HMENU hMenu,
UINT* pIndexMenu,
UINT iIdCmdFirst,
UINT iIdCmdFirst,
UINT iIdCmdLast)
{
MENUITEMINFOW mii;
@ -688,7 +685,7 @@ CDefaultContextMenu::QueryContextMenu(
idCmdNext = idCmdFirst + cIds;
/* Add dynamic context menu handlers */
cIds += AddShellExtensionsToMenu(hMenu, &IndexMenu, idCmdNext, idCmdLast);
cIds += AddShellExtensionsToMenu(hMenu, &IndexMenu, idCmdNext, idCmdLast, uFlags);
m_iIdSHEFirst = m_iIdSCMLast;
m_iIdSHELast = cIds;
idCmdNext = idCmdFirst + cIds;

View file

@ -244,6 +244,7 @@ UINT CSendToMenu::InsertSendToItems(HMENU hMenu, UINT idCmdFirst, UINT Pos)
{
CStringW strNone(MAKEINTRESOURCEW(IDS_NONE));
AppendMenuW(hMenu, MF_GRAYED | MF_DISABLED | MF_STRING, idCmd, strNone);
++idCmd;
}
return idCmd - idCmdFirst;
@ -294,6 +295,9 @@ CSendToMenu::QueryContextMenu(HMENU hMenu,
TRACE("%p %p %u %u %u %u\n", this,
hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
if (uFlags & (CMF_NOVERBS | CMF_VERBSONLY))
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, idCmdFirst);
HMENU hSubMenu = CreateMenu();
if (!hSubMenu)
{
@ -323,7 +327,7 @@ CSendToMenu::QueryContextMenu(HMENU hMenu,
m_hSubMenu = hSubMenu;
DestroyMenu(hOldSubMenu);
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, cItems);
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, idCmdFirst + cItems);
}
STDMETHODIMP