https://git.reactos.org/?p=reactos.git;a=commitdiff;h=67f99833cdb861a11720ad03685b439b599e3233
commit 67f99833cdb861a11720ad03685b439b599e3233 Author: Giannis Adamopoulos <gadamopou...@reactos.org> AuthorDate: Thu Feb 15 00:58:22 2018 +0200 Commit: Giannis Adamopoulos <gadamopou...@reactos.org> CommitDate: Thu Feb 15 00:58:22 2018 +0200 [SHELL32] CNewMenu: Don't use CWM_GETISHELLBROWSER. CDefaultContextMenu: Set the site for context menu extensions CNewMenu: Get SID_IFolderView service of the site to get the IShellView --- dll/win32/shell32/CDefaultContextMenu.cpp | 3 +++ dll/win32/shell32/CNewMenu.cpp | 21 +++++++++------------ dll/win32/shell32/CNewMenu.h | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dll/win32/shell32/CDefaultContextMenu.cpp b/dll/win32/shell32/CDefaultContextMenu.cpp index dcb754bd96..0834995abd 100644 --- a/dll/win32/shell32/CDefaultContextMenu.cpp +++ b/dll/win32/shell32/CDefaultContextMenu.cpp @@ -376,6 +376,9 @@ CDefaultContextMenu::LoadDynamicContextMenuHandler(HKEY hKey, const CLSID *pclsi return hr; } + if (m_site) + IUnknown_SetSite(pcm, m_site); + PDynamicShellEntry pEntry = (DynamicShellEntry *)HeapAlloc(GetProcessHeap(), 0, sizeof(DynamicShellEntry)); if (!pEntry) return E_OUTOFMEMORY; diff --git a/dll/win32/shell32/CNewMenu.cpp b/dll/win32/shell32/CNewMenu.cpp index 8dd1d86f74..4a17e9b58b 100644 --- a/dll/win32/shell32/CNewMenu.cpp +++ b/dll/win32/shell32/CNewMenu.cpp @@ -404,7 +404,7 @@ CNewMenu::SHELLNEW_ITEM *CNewMenu::FindItemFromIdOffset(UINT IdOffset) return pItem; } -HRESULT CNewMenu::SelectNewItem(LPCMINVOKECOMMANDINFO lpici, LONG wEventId, UINT uFlags, LPWSTR pszName) +HRESULT CNewMenu::SelectNewItem(LONG wEventId, UINT uFlags, LPWSTR pszName) { CComPtr<IShellBrowser> lpSB; CComPtr<IShellView> lpSV; @@ -415,16 +415,13 @@ HRESULT CNewMenu::SelectNewItem(LPCMINVOKECOMMANDINFO lpici, LONG wEventId, UINT /* Notify the view object about the new item */ SHChangeNotify(wEventId, uFlags, (LPCVOID) pszName, NULL); - /* FIXME: I think that this can be implemented using callbacks to the shell folder */ + if (!m_pSite) + return S_OK; - /* Note: CWM_GETISHELLBROWSER returns shell browser without adding reference */ - lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER, 0, 0); - if (!lpSB) - return E_FAIL; - - hr = lpSB->QueryActiveShellView(&lpSV); - if (FAILED(hr)) - return hr; + /* Get a pointer to the shell view */ + hr = IUnknown_QueryService(m_pSite, SID_IFolderView, IID_PPV_ARG(IShellView, &lpSV)); + if (FAILED_UNEXPECTEDLY(hr)) + return S_OK; /* Attempt to get the pidl of the new item */ hr = SHILCreateFromPathW(pszName, &pidl, NULL); @@ -466,7 +463,7 @@ HRESULT CNewMenu::CreateNewFolder(LPCMINVOKECOMMANDINFO lpici) return E_FAIL; /* Show and select the new item in the def view */ - SelectNewItem(lpici, SHCNE_MKDIR, SHCNF_PATHW, wszName); + SelectNewItem(SHCNE_MKDIR, SHCNF_PATHW, wszName); return S_OK; } @@ -572,7 +569,7 @@ HRESULT CNewMenu::CreateNewItem(SHELLNEW_ITEM *pItem, LPCMINVOKECOMMANDINFO lpcm if (bSuccess) { TRACE("Notifying fs %s\n", debugstr_w(wszName)); - SelectNewItem(lpcmi, SHCNE_CREATE, SHCNF_PATHW, wszName); + SelectNewItem(SHCNE_CREATE, SHCNF_PATHW, wszName); } else { diff --git a/dll/win32/shell32/CNewMenu.h b/dll/win32/shell32/CNewMenu.h index 2d2c52a355..2475e725a9 100644 --- a/dll/win32/shell32/CNewMenu.h +++ b/dll/win32/shell32/CNewMenu.h @@ -71,7 +71,7 @@ private: SHELLNEW_ITEM *FindItemFromIdOffset(UINT IdOffset); HRESULT CreateNewFolder(LPCMINVOKECOMMANDINFO lpici); HRESULT CreateNewItem(SHELLNEW_ITEM *pItem, LPCMINVOKECOMMANDINFO lpcmi); - HRESULT SelectNewItem(LPCMINVOKECOMMANDINFO lpici, LONG wEventId, UINT uFlags, LPWSTR pszName); + HRESULT SelectNewItem(LONG wEventId, UINT uFlags, LPWSTR pszName); public: CNewMenu();