https://git.reactos.org/?p=reactos.git;a=commitdiff;h=111c40e012dc07e7f829bc...
commit 111c40e012dc07e7f829bc314615f4e37d86e6d0 Author: Giannis Adamopoulos gadamopoulos@reactos.org AuthorDate: Wed Feb 14 00:03:35 2018 +0200 Commit: Giannis Adamopoulos gadamopoulos@reactos.org CommitDate: Wed Feb 14 00:03:35 2018 +0200
[SHELL32] CDefViewBckgrndMenu: Fix handling string verbs. It shouldn't be necessary for QueryContextMenu to be called before InvokeCommand. Move retrieving the IContextMenu of the folder to the initialization of the class. CORE-12866 --- dll/win32/shell32/CDefViewBckgrndMenu.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/dll/win32/shell32/CDefViewBckgrndMenu.cpp b/dll/win32/shell32/CDefViewBckgrndMenu.cpp index 2fc6f1ac02..3815019894 100644 --- a/dll/win32/shell32/CDefViewBckgrndMenu.cpp +++ b/dll/win32/shell32/CDefViewBckgrndMenu.cpp @@ -113,6 +113,11 @@ HRESULT CDefViewBckgrndMenu::Initialize(IShellFolder* psf) { m_psf = psf; + + /* Get the context menu of the folder. Do it here because someone may call + InvokeCommand without calling QueryContextMenu. It is fine if this fails */ + m_psf->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &m_folderCM)); + return S_OK; }
@@ -154,9 +159,8 @@ CDefViewBckgrndMenu::QueryContextMenu(HMENU hMenu, UINT indexMenu, UINT idCmdFir but as stated above, its sole user is CDefView and should really be that way. */ m_idCmdFirst = idCmdFirst;
- /* Query the shell folder to add any items it wants to add in the background context menu */ - hr = m_psf->CreateViewObject(NULL, IID_PPV_ARG(IContextMenu, &m_folderCM)); - if (SUCCEEDED(hr)) + /* Let the shell folder add any items it wants to add in the background context menu */ + if (m_folderCM) { hr = m_folderCM->QueryContextMenu(hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); if (SUCCEEDED(hr))