[SHELLFIND] Open search results folder with search button
authorBrock Mammen <brockmammen@gmail.com>
Fri, 19 Jul 2019 02:28:11 +0000 (21:28 -0500)
committerGiannis Adamopoulos <gadamopoulos@reactos.org>
Sun, 15 Sep 2019 16:46:36 +0000 (19:46 +0300)
dll/win32/browseui/shellfind/CSearchBar.cpp
dll/win32/browseui/shellfind/CSearchBar.h

index b07b5ac..f2329b6 100644 (file)
@@ -112,6 +112,28 @@ LRESULT CSearchBar::OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bH
     return TRUE;
 }
 
+LRESULT CSearchBar::OnSearchButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
+{
+    CComPtr<IShellBrowser> pShellBrowser;
+    HRESULT hr = IUnknown_QueryService(pSite, SID_SShellBrowser, IID_PPV_ARG(IShellBrowser, &pShellBrowser));
+    if (FAILED_UNEXPECTEDLY(hr))
+        return hr;
+
+    WCHAR szShellGuid[MAX_PATH];
+    const WCHAR shellGuidPrefix[] = L"shell:::";
+    memcpy(szShellGuid, shellGuidPrefix, sizeof(shellGuidPrefix));
+    hr = StringFromGUID2(CLSID_FindFolder, szShellGuid + _countof(shellGuidPrefix) - 1, _countof(szShellGuid) - _countof(shellGuidPrefix));
+    if (FAILED_UNEXPECTEDLY(hr))
+        return hr;
+
+    LPITEMIDLIST findFolderPidl;
+    hr = SHParseDisplayName(szShellGuid, NULL, &findFolderPidl, 0, NULL);
+    if (FAILED_UNEXPECTEDLY(hr))
+        return hr;
+
+    return pShellBrowser->BrowseObject(findFolderPidl, 0);
+}
+
 
 // *** IOleWindow methods ***
 HRESULT STDMETHODCALLTYPE CSearchBar::GetWindow(HWND *lphwnd)
index 5ab67b4..81c9455 100644 (file)
@@ -47,6 +47,7 @@ private:
 
     // *** ATL event handlers ***
     LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+    LRESULT OnSearchButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
 
 public:
     CSearchBar();
@@ -134,5 +135,6 @@ public:
 
     BEGIN_MSG_MAP(CSearchBar)
         MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
+        COMMAND_CODE_HANDLER(BN_CLICKED, OnSearchButtonClicked)
     END_MSG_MAP()
 };