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

View file

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