From 0f995d77d16c6946e9a35bfcc704aa0588a28b9b Mon Sep 17 00:00:00 2001 From: Brock Mammen Date: Sun, 25 Aug 2019 17:05:17 -0500 Subject: [PATCH] [SHELLFIND] Remove search results folder from address edit box --- dll/win32/browseui/shellfind/CSearchBar.cpp | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/dll/win32/browseui/shellfind/CSearchBar.cpp b/dll/win32/browseui/shellfind/CSearchBar.cpp index 468569de36b..71ce9b1d32a 100644 --- a/dll/win32/browseui/shellfind/CSearchBar.cpp +++ b/dll/win32/browseui/shellfind/CSearchBar.cpp @@ -599,8 +599,49 @@ HRESULT STDMETHODCALLTYPE CSearchBar::Invoke(DISPID dispIdMember, REFIID riid, L { case DISPID_NAVIGATECOMPLETE2: case DISPID_DOCUMENTCOMPLETE: + { TrySubscribeToSearchEvents(); + + // Remove the search results folder from the address box + CComPtr pDispatch; + HRESULT hResult = m_AddressEditBox->QueryInterface(IID_PPV_ARG(IDispatch, &pDispatch)); + if (FAILED_UNEXPECTEDLY(hResult)) + return hResult; + pDispatch->Invoke(dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); + CComPtr pShellService; + hResult = m_AddressEditBox->QueryInterface(IID_PPV_ARG(IShellService, &pShellService)); + if (FAILED_UNEXPECTEDLY(hResult)) + return hResult; + hResult = pShellService->SetOwner(NULL); + if (FAILED_UNEXPECTEDLY(hResult)) + return hResult; + HWND hComboboxEx = GetDlgItem(IDC_SEARCH_COMBOBOX); + int index = SendMessageW(hComboboxEx, CB_GETCOUNT, 0, 0); + if (index <= 0) + return S_OK; + COMBOBOXEXITEMW item = {0}; + item.mask = CBEIF_LPARAM; + item.iItem = index - 1; + SendMessageW(hComboboxEx, CBEM_GETITEMW, 0, (LPARAM)&item); + if (!item.lParam) + return S_OK; + CComPtr pDesktopFolder; + hResult = SHGetDesktopFolder(&pDesktopFolder); + if (FAILED_UNEXPECTEDLY(hResult)) + return hResult; + CComPtr pShellFolder; + hResult = pDesktopFolder->BindToObject((LPCITEMIDLIST)item.lParam, NULL, IID_PPV_ARG(IShellFolder, &pShellFolder)); + if (FAILED(hResult)) + return S_OK; + CLSID clsid; + hResult = IUnknown_GetClassID(pShellFolder, &clsid); + if (SUCCEEDED(hResult) && clsid == CLSID_FindFolder) + { + SendMessageW(hComboboxEx, CBEM_DELETEITEM, item.iItem, 0); + SendMessageW(hComboboxEx, CB_SETCURSEL, 0, 0); + } return S_OK; + } case DISPID_SEARCHCOMPLETE: case DISPID_SEARCHABORT: SetSearchInProgress(FALSE); -- 2.17.1