diff --git a/dll/win32/browseui/shellbrowser.cpp b/dll/win32/browseui/shellbrowser.cpp index 88f77dde8b7..de7b48f4492 100644 --- a/dll/win32/browseui/shellbrowser.cpp +++ b/dll/win32/browseui/shellbrowser.cpp @@ -3163,19 +3163,41 @@ HRESULT STDMETHODCALLTYPE CShellBrowser::v_CheckZoneCrossing(LPCITEMIDLIST pidl) HRESULT STDMETHODCALLTYPE CShellBrowser::GoBack() { CComPtr travelLog; - HRESULT hResult = GetTravelLog(&travelLog); + CComPtr unusedEntry; + HRESULT hResult; + + hResult = GetTravelLog(&travelLog); if (FAILED_UNEXPECTEDLY(hResult)) return hResult; - return travelLog->Travel(static_cast(this), TLOG_BACK); + + hResult = travelLog->GetTravelEntry(static_cast(this), TLOG_BACK, &unusedEntry); + if (SUCCEEDED(hResult)) + { + unusedEntry.Release(); + return travelLog->Travel(static_cast(this), TLOG_BACK); + } + + return hResult; } HRESULT STDMETHODCALLTYPE CShellBrowser::GoForward() { CComPtr travelLog; - HRESULT hResult = GetTravelLog(&travelLog); + CComPtr unusedEntry; + HRESULT hResult; + + hResult = GetTravelLog(&travelLog); if (FAILED_UNEXPECTEDLY(hResult)) return hResult; - return travelLog->Travel(static_cast(this), TLOG_FORE); + + hResult = travelLog->GetTravelEntry(static_cast(this), TLOG_FORE, &unusedEntry); + if (SUCCEEDED(hResult)) + { + unusedEntry.Release(); + return travelLog->Travel(static_cast(this), TLOG_FORE); + } + + return hResult; } HRESULT STDMETHODCALLTYPE CShellBrowser::GoHome() @@ -3953,10 +3975,14 @@ LRESULT CShellBrowser::OnGoHome(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL & LRESULT CShellBrowser::OnBackspace(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled) { - // FIXME: This does not appear to be what windows does. - HRESULT hResult = NavigateToParent(); + HRESULT hResult; + if (LOBYTE(GetVersion()) < 6) + hResult = NavigateToParent(); + else if (FAILED(hResult = GoBack())) + hResult = GoForward(); + if (FAILED(hResult)) - TRACE("NavigateToParent failed with hResult=%08lx\n", hResult); + TRACE("Backspace navigation failed with hResult=%08lx\n", hResult); return 0; }