mirror of
https://github.com/reactos/reactos.git
synced 2024-12-31 19:42:51 +00:00
[SHELL32] Pass correct lParam to DFM_INVOKECOMMAND (#6765)
This commit is contained in:
parent
ea5728b5f3
commit
3b73d62eaa
1 changed files with 26 additions and 2 deletions
|
@ -157,6 +157,7 @@ class CDefaultContextMenu :
|
||||||
WCHAR m_DefVerbs[MAX_PATH];
|
WCHAR m_DefVerbs[MAX_PATH];
|
||||||
|
|
||||||
HRESULT _DoCallback(UINT uMsg, WPARAM wParam, LPVOID lParam);
|
HRESULT _DoCallback(UINT uMsg, WPARAM wParam, LPVOID lParam);
|
||||||
|
HRESULT _DoInvokeCommandCallback(LPCMINVOKECOMMANDINFOEX lpcmi, WPARAM CmdId);
|
||||||
void AddStaticEntry(const HKEY hkeyClass, const WCHAR *szVerb, UINT uFlags);
|
void AddStaticEntry(const HKEY hkeyClass, const WCHAR *szVerb, UINT uFlags);
|
||||||
void AddStaticEntriesForKey(HKEY hKey, UINT uFlags);
|
void AddStaticEntriesForKey(HKEY hKey, UINT uFlags);
|
||||||
void TryPickDefault(HMENU hMenu, UINT idCmdFirst, UINT DfltOffset, UINT uFlags);
|
void TryPickDefault(HMENU hMenu, UINT idCmdFirst, UINT DfltOffset, UINT uFlags);
|
||||||
|
@ -1053,7 +1054,7 @@ HRESULT
|
||||||
CDefaultContextMenu::DoProperties(
|
CDefaultContextMenu::DoProperties(
|
||||||
LPCMINVOKECOMMANDINFOEX lpcmi)
|
LPCMINVOKECOMMANDINFOEX lpcmi)
|
||||||
{
|
{
|
||||||
HRESULT hr = _DoCallback(DFM_INVOKECOMMAND, DFM_CMD_PROPERTIES, NULL);
|
HRESULT hr = _DoInvokeCommandCallback(lpcmi, DFM_CMD_PROPERTIES);
|
||||||
|
|
||||||
// We are asked to run the default property sheet
|
// We are asked to run the default property sheet
|
||||||
if (hr == S_FALSE)
|
if (hr == S_FALSE)
|
||||||
|
@ -1458,6 +1459,29 @@ CDefaultContextMenu::InvokeRegVerb(
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT
|
||||||
|
CDefaultContextMenu::_DoInvokeCommandCallback(
|
||||||
|
LPCMINVOKECOMMANDINFOEX lpcmi, WPARAM CmdId)
|
||||||
|
{
|
||||||
|
BOOL Unicode = IsUnicode(*lpcmi);
|
||||||
|
WCHAR lParamBuf[MAX_PATH];
|
||||||
|
LPARAM lParam = 0;
|
||||||
|
|
||||||
|
if (Unicode && lpcmi->lpParametersW)
|
||||||
|
lParam = (LPARAM)lpcmi->lpParametersW;
|
||||||
|
else if (lpcmi->lpParameters)
|
||||||
|
lParam = SHAnsiToUnicode(lpcmi->lpParameters, lParamBuf, _countof(lParamBuf)) ? (LPARAM)lParamBuf : 0;
|
||||||
|
|
||||||
|
HRESULT hr;
|
||||||
|
#if 0 // TODO: Try DFM_INVOKECOMMANDEX first.
|
||||||
|
DFMICS dfmics = { sizeof(DFMICS), lpcmi->fMask, lParam, m_iIdSCMFirst?, m_iIdDfltLast?, (LPCMINVOKECOMMANDINFO)lpcmi, m_site };
|
||||||
|
hr = _DoCallback(DFM_INVOKECOMMANDEX, CmdId, &dfmics);
|
||||||
|
if (hr == E_NOTIMPL)
|
||||||
|
#endif
|
||||||
|
hr = _DoCallback(DFM_INVOKECOMMAND, CmdId, (void*)lParam);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
HRESULT
|
HRESULT
|
||||||
WINAPI
|
WINAPI
|
||||||
CDefaultContextMenu::InvokeCommand(
|
CDefaultContextMenu::InvokeCommand(
|
||||||
|
@ -1498,7 +1522,7 @@ CDefaultContextMenu::InvokeCommand(
|
||||||
|
|
||||||
if (m_iIdCBFirst != m_iIdCBLast && CmdId >= m_iIdCBFirst && CmdId < m_iIdCBLast)
|
if (m_iIdCBFirst != m_iIdCBLast && CmdId >= m_iIdCBFirst && CmdId < m_iIdCBLast)
|
||||||
{
|
{
|
||||||
Result = _DoCallback(DFM_INVOKECOMMAND, CmdId - m_iIdCBFirst, NULL);
|
Result = _DoInvokeCommandCallback(&LocalInvokeInfo, CmdId - m_iIdCBFirst);
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue