From 1c979e2bfb78cba5216519c87f37b436afa7cd03 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 30 May 2016 20:52:05 +0000 Subject: [PATCH] [BROWSEUI] - Move the implementation of the search button from CInternetToolbar to CShellBrowser. - Part of the work submitted by Sylvain Deverre. CORE-8814 and CORE-10838 svn path=/trunk/; revision=71463 --- .../dll/win32/browseui/internettoolbar.cpp | 28 +---------- reactos/dll/win32/browseui/shellbrowser.cpp | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/reactos/dll/win32/browseui/internettoolbar.cpp b/reactos/dll/win32/browseui/internettoolbar.cpp index f8a40f2f69e..fdd7aa46295 100644 --- a/reactos/dll/win32/browseui/internettoolbar.cpp +++ b/reactos/dll/win32/browseui/internettoolbar.cpp @@ -1503,33 +1503,7 @@ LRESULT CInternetToolbar::OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BO LRESULT CInternetToolbar::OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled) { - CComPtr objectWithSite; - CComPtr contextMenu; - CMINVOKECOMMANDINFO commandInfo; - const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}"; - HRESULT hResult; - - // TODO: Query shell if this command is enabled first - - memset(&commandInfo, 0, sizeof(commandInfo)); - commandInfo.cbSize = sizeof(commandInfo); - commandInfo.hwnd = m_hWnd; - commandInfo.lpParameters = searchGUID; - commandInfo.nShow = SW_SHOWNORMAL; - - hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER, - IID_PPV_ARG(IContextMenu, &contextMenu)); - if (FAILED_UNEXPECTEDLY(hResult)) - return 0; - hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite)); - if (FAILED_UNEXPECTEDLY(hResult)) - return 0; - hResult = objectWithSite->SetSite(fSite); - if (FAILED_UNEXPECTEDLY(hResult)) - return 0; - hResult = contextMenu->InvokeCommand(&commandInfo); - hResult = objectWithSite->SetSite(NULL); - return 0; + return IUnknown_Exec(fSite, CLSID_CommonButtons, 0x123, 1, NULL, NULL); } LRESULT CInternetToolbar::OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled) diff --git a/reactos/dll/win32/browseui/shellbrowser.cpp b/reactos/dll/win32/browseui/shellbrowser.cpp index 98f8ee0796e..169c6cbe5f5 100644 --- a/reactos/dll/win32/browseui/shellbrowser.cpp +++ b/reactos/dll/win32/browseui/shellbrowser.cpp @@ -345,6 +345,7 @@ public: HRESULT UpdateUpState(); void UpdateGotoMenu(HMENU theMenu); void UpdateViewMenu(HMENU theMenu); + HRESULT OnSearch(); /* // *** IDockingWindowFrame methods *** virtual HRESULT STDMETHODCALLTYPE AddToolbar(IUnknown *punkSrc, LPCWSTR pwszItem, DWORD dwAddFlags); @@ -1638,6 +1639,37 @@ void CShellBrowser::UpdateViewMenu(HMENU theMenu) SHEnableMenuItem(theMenu, IDM_VIEW_EXPLORERBAR, FALSE); } +HRESULT CShellBrowser::OnSearch() +{ + CComPtr objectWithSite; + CComPtr contextMenu; + CMINVOKECOMMANDINFO commandInfo; + const char *searchGUID = "{169A0691-8DF9-11d1-A1C4-00C04FD75D13}"; + HRESULT hResult; + + // TODO: Query shell if this command is enabled first + + memset(&commandInfo, 0, sizeof(commandInfo)); + commandInfo.cbSize = sizeof(commandInfo); + commandInfo.hwnd = m_hWnd; + commandInfo.lpParameters = searchGUID; + commandInfo.nShow = SW_SHOWNORMAL; + + hResult = CoCreateInstance(CLSID_ShellSearchExt, NULL, CLSCTX_INPROC_SERVER, + IID_PPV_ARG(IContextMenu, &contextMenu)); + if (FAILED_UNEXPECTEDLY(hResult)) + return 0; + hResult = contextMenu->QueryInterface(IID_PPV_ARG(IObjectWithSite, &objectWithSite)); + if (FAILED_UNEXPECTEDLY(hResult)) + return 0; + hResult = objectWithSite->SetSite(dynamic_cast(this)); + if (FAILED_UNEXPECTEDLY(hResult)) + return 0; + hResult = contextMenu->InvokeCommand(&commandInfo); + hResult = objectWithSite->SetSite(NULL); + return hResult; +} + bool IUnknownIsEqual(IUnknown *int1, IUnknown *int2) { CComPtr int1Retry; @@ -1866,6 +1898,20 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::Exec(const GUID *pguidCmdGroup, DWORD n break; } } + else if (IsEqualIID(*pguidCmdGroup, CLSID_CommonButtons)) + { + // Windows seems to use this as proxy for toolbar buttons. + // We use it for search band for now to remove code duplication, + // let's see if it could be useful in the future. + switch (nCmdID) + { + case 0x123: + // Show search band from toolbar + OnSearch(); + return S_OK; + } + return E_NOTIMPL; + } else { return E_NOTIMPL;