https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b6b7bda44328c9fd5d9c1…
commit b6b7bda44328c9fd5d9c1e94a9042723209b80c2
Author: Doug Lyons <douglyons(a)douglyons.com>
AuthorDate: Sat Oct 5 09:32:49 2019 -0500
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sat Oct 5 16:32:49 2019 +0200
Shell Find Improvements to make Search Item general and Show Sub-directories (#1927)
* Shell Find Improvement to make Search Item general by adding asterisks before and
after before search and show sub-directories in find listing. CORE-16152
---
dll/win32/browseui/shellfind/CFindFolder.cpp | 6 ++++++
dll/win32/browseui/shellfind/CSearchBar.cpp | 28 ++++++++++++++++++++++++++++
2 files changed, 34 insertions(+)
diff --git a/dll/win32/browseui/shellfind/CFindFolder.cpp
b/dll/win32/browseui/shellfind/CFindFolder.cpp
index 0a2aec890ac..4db35f633b3 100644
--- a/dll/win32/browseui/shellfind/CFindFolder.cpp
+++ b/dll/win32/browseui/shellfind/CFindFolder.cpp
@@ -260,6 +260,12 @@ static UINT RecursiveFind(LPCWSTR lpPath, _SearchData *pSearchData)
if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
CStringW status;
+ if ((pSearchData->szFileName.IsEmpty() ||
PathMatchSpecW(FindData.cFileName, pSearchData->szFileName))
+ && (pSearchData->szQueryA.IsEmpty() || SearchFile(szPath,
pSearchData)))
+ {
+ PostMessageW(pSearchData->hwnd, WM_SEARCH_ADD_RESULT, 0, (LPARAM)
StrDupW(szPath));
+ uTotalFound++;
+ }
status.Format(IDS_SEARCH_FOLDER, FindData.cFileName);
PostMessageW(pSearchData->hwnd, WM_SEARCH_UPDATE_STATUS, 0, (LPARAM)
StrDupW(status.GetBuffer()));
diff --git a/dll/win32/browseui/shellfind/CSearchBar.cpp
b/dll/win32/browseui/shellfind/CSearchBar.cpp
index 6d486cec370..5e7117193d4 100644
--- a/dll/win32/browseui/shellfind/CSearchBar.cpp
+++ b/dll/win32/browseui/shellfind/CSearchBar.cpp
@@ -122,6 +122,10 @@ HRESULT CSearchBar::GetSearchResultsFolder(IShellBrowser
**ppShellBrowser, HWND
LRESULT CSearchBar::OnSearchButtonClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled)
{
+ size_t len = 0;
+ WCHAR endchar;
+ WCHAR startchar;
+
CComHeapPtr<SearchStart> pSearchStart(static_cast<SearchStart
*>(CoTaskMemAlloc(sizeof(SearchStart))));
GetDlgItemText(IDC_SEARCH_FILENAME, pSearchStart->szFileName,
_countof(pSearchStart->szFileName));
GetDlgItemText(IDC_SEARCH_QUERY, pSearchStart->szQuery,
_countof(pSearchStart->szQuery));
@@ -131,6 +135,30 @@ LRESULT CSearchBar::OnSearchButtonClicked(WORD wNotifyCode, WORD wID,
HWND hWndC
return 0;
}
+ // See if we have an szFileName by testing for its entry lenth > 0 and our
searched FileName does not contain
+ // an asterisk or a question mark. If so, then prepend and append an asterisk to the
searched FileName.
+ // (i.e. it's equivalent to searching for *<the_file_name>* )
+ if (FAILED (StringCchLengthW (pSearchStart->szFileName, MAX_PATH, &len)))
return 0;
+ if ((len > 0) && !wcspbrk(pSearchStart->szFileName, L"*?"))
+ {
+ endchar = pSearchStart->szFileName[len - 1];
+ startchar = pSearchStart->szFileName[0];
+ if ((len < MAX_PATH - 1) && (startchar != L'*'))
+ {
+ memmove(&pSearchStart->szFileName[1],
&pSearchStart->szFileName[0],
+ len * sizeof(WCHAR) + sizeof(WCHAR));
+ len = len + 1;
+ pSearchStart->szFileName[0] = L'*';
+ }
+
+ // See if our last character is an asterisk and if not and we have room then add
one
+ if ((len < MAX_PATH - 1) && (endchar != L'*'))
+ StringCchCatW(pSearchStart->szFileName, MAX_PATH, L"*");
+ }
+
+ // Print our final search string for szFileName
+ TRACE("Searched szFileName is '%S'.\n",
pSearchStart->szFileName);
+
CComPtr<IShellBrowser> pShellBrowser;
HRESULT hr = IUnknown_QueryService(m_pSite, SID_SShellBrowser,
IID_PPV_ARG(IShellBrowser, &pShellBrowser));
if (FAILED_UNEXPECTEDLY(hr))