diff --git a/dll/win32/browseui/addressband.cpp b/dll/win32/browseui/addressband.cpp index 4812ab805e4..8e1f92e3811 100644 --- a/dll/win32/browseui/addressband.cpp +++ b/dll/win32/browseui/addressband.cpp @@ -347,6 +347,8 @@ HRESULT STDMETHODCALLTYPE CAddressBand::OnWinEvent( CComPtr winEventHandler; HRESULT hResult; + *theResult = 0; + switch (uMsg) { case WM_WININICHANGE: @@ -544,7 +546,6 @@ LRESULT CAddressBand::OnNotifyClick(WPARAM wParam, NMHDR *notifyHeader, BOOL &bH { if (notifyHeader->hwndFrom == fGoButton) { - fAddressEditBox->ParseNow(0); fAddressEditBox->Execute(0); } return 0; diff --git a/dll/win32/browseui/addresseditbox.cpp b/dll/win32/browseui/addresseditbox.cpp index 2ff05cec514..78ff858f23e 100644 --- a/dll/win32/browseui/addresseditbox.cpp +++ b/dll/win32/browseui/addresseditbox.cpp @@ -74,6 +74,8 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::Init(HWND comboboxEx, HWND editContro fEditWindow.SubclassWindow(editControl); fSite = param18; + SHAutoComplete(fEditWindow.m_hWnd, SHACF_FILESYSTEM | SHACF_URLALL | SHACF_USETAB); + // take advice to watch events HRESULT hResult = IUnknown_QueryService(param18, SID_SShellBrowser, IID_PPV_ARG(IBrowserService, &browserService)); if (SUCCEEDED(hResult)) @@ -98,8 +100,12 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::ParseNow(long paramC) CComPtr pisb; hr = IUnknown_QueryService(fSite, SID_SShellBrowser, IID_PPV_ARG(IShellBrowser, &pisb)); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; - IUnknown_GetWindow(pisb, &topLevelWindow); + hr = IUnknown_GetWindow(pisb, &topLevelWindow); + if (FAILED_UNEXPECTEDLY(hr)) + return hr; LPWSTR input; int inputLength = GetWindowTextLength(fCombobox.m_hWnd) + 2; @@ -118,12 +124,19 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::ParseNow(long paramC) { addressLength += 2; address = new WCHAR[addressLength]; - ExpandEnvironmentStrings(input, address, 0); + if (!ExpandEnvironmentStrings(input, address, addressLength)) + { + delete[] address; + address = input; + } } CComPtr psfDesktop; hr = SHGetDesktopFolder(&psfDesktop); - hr = psfDesktop->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidlLastParsed, &attributes); + if (SUCCEEDED(hr)) + { + hr = psfDesktop->ParseDisplayName(topLevelWindow, NULL, address, &eaten, &pidlLastParsed, &attributes); + } if (address != input) delete [] address; @@ -171,8 +184,21 @@ HRESULT STDMETHODCALLTYPE CAddressEditBox::Save(long paramC) HRESULT STDMETHODCALLTYPE CAddressEditBox::OnWinEvent( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult) { - // handle fill of listbox here - return E_NOTIMPL; + LPNMHDR hdr; + + *theResult = 0; + + switch (uMsg) + { + case WM_NOTIFY: + hdr = (LPNMHDR) lParam; + if (hdr->code == CBEN_ENDEDIT) + { + ParseNow(0); + } + break; + } + return S_OK; } HRESULT STDMETHODCALLTYPE CAddressEditBox::IsWindowOwner(HWND hWnd)