https://git.reactos.org/?p=reactos.git;a=commitdiff;h=206156fad57dc951cde3e1...
commit 206156fad57dc951cde3e100e584add0d1e8e4ec Author: Katayama Hirofumi MZ katayama.hirofumi.mz@gmail.com AuthorDate: Sat Apr 3 20:38:25 2021 +0900 Commit: GitHub noreply@github.com CommitDate: Sat Apr 3 20:38:25 2021 +0900
[BROWSEUI] Fix auto-completion on relative paths (#3578)
Fix the CLSID_ACListISF object about relative paths. If the given path is relative at CACListISF::Expand, then convert it to a full path. CORE-9281 --- dll/win32/browseui/aclistisf.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/dll/win32/browseui/aclistisf.cpp b/dll/win32/browseui/aclistisf.cpp index 15de181714a..4e62b8a5e97 100644 --- a/dll/win32/browseui/aclistisf.cpp +++ b/dll/win32/browseui/aclistisf.cpp @@ -2,7 +2,7 @@ * Shell AutoComplete list * * Copyright 2015 Thomas Faber - * Copyright 2020 Katayama Hirofumi MZ + * Copyright 2020-2021 Katayama Hirofumi MZ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -329,10 +329,20 @@ STDMETHODIMP CACListISF::Expand(LPCOLESTR pszExpand) TRACE("(%p, %ls)\n", this, pszExpand);
m_szExpand = pszExpand; - m_iNextLocation = LT_DIRECTORY; + + // get full path + WCHAR szPath1[MAX_PATH], szPath2[MAX_PATH]; + if (PathIsRelativeW(pszExpand) && + SHGetPathFromIDListW(m_pidlCurDir, szPath1) && + PathCombineW(szPath2, szPath1, pszExpand)) + { + pszExpand = szPath2; + } + GetFullPathNameW(pszExpand, _countof(szPath1), szPath1, NULL); + CComHeapPtr<ITEMIDLIST> pidl; - HRESULT hr = SHParseDisplayName(m_szExpand, NULL, &pidl, NULL, NULL); + HRESULT hr = SHParseDisplayName(szPath1, NULL, &pidl, NULL, NULL); if (SUCCEEDED(hr)) { hr = SetLocation(pidl.Detach());