diff --git a/reactos/dll/win32/browseui/basebar.cpp b/reactos/dll/win32/browseui/basebar.cpp index edad3bbe401..584933efc2d 100644 --- a/reactos/dll/win32/browseui/basebar.cpp +++ b/reactos/dll/win32/browseui/basebar.cpp @@ -241,8 +241,7 @@ HRESULT STDMETHODCALLTYPE CBaseBar::ContextSensitiveHelp(BOOL fEnterMode) HRESULT STDMETHODCALLTYPE CBaseBar::OnFocusChangeIS (IUnknown *punkObj, BOOL fSetFocus) { - // forward to owner - return E_NOTIMPL; + return IUnknown_OnFocusChangeIS(fSite, punkObj, fSetFocus); } HRESULT STDMETHODCALLTYPE CBaseBar::QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, @@ -291,20 +290,17 @@ HRESULT STDMETHODCALLTYPE CBaseBar::QueryService(REFGUID guidService, REFIID rii HRESULT STDMETHODCALLTYPE CBaseBar::UIActivateIO(BOOL fActivate, LPMSG lpMsg) { - // forward to contained bar - return S_OK; + return IUnknown_UIActivateIO(fClient, fActivate, lpMsg); } HRESULT STDMETHODCALLTYPE CBaseBar::HasFocusIO() { - // forward to contained bar - return S_OK; + return IUnknown_HasFocusIO(fClient); } HRESULT STDMETHODCALLTYPE CBaseBar::TranslateAcceleratorIO(LPMSG lpMsg) { - // forward to contained bar - return S_FALSE; + return IUnknown_TranslateAcceleratorIO(fClient, lpMsg); } HRESULT STDMETHODCALLTYPE CBaseBar::SetClient(IUnknown *punkClient) diff --git a/reactos/dll/win32/browseui/basebarsite.cpp b/reactos/dll/win32/browseui/basebarsite.cpp index db0e9af7d6f..468e2067231 100644 --- a/reactos/dll/win32/browseui/basebarsite.cpp +++ b/reactos/dll/win32/browseui/basebarsite.cpp @@ -248,17 +248,33 @@ HRESULT STDMETHODCALLTYPE CBaseBarSite::ContextSensitiveHelp(BOOL fEnterMode) HRESULT STDMETHODCALLTYPE CBaseBarSite::UIActivateIO(BOOL fActivate, LPMSG lpMsg) { - return E_NOTIMPL; + if (!fCurrentActiveBar) + return S_OK; + + return IUnknown_UIActivateIO(fCurrentActiveBar->fTheBar, fActivate, lpMsg); } HRESULT STDMETHODCALLTYPE CBaseBarSite::HasFocusIO() { - return E_NOTIMPL; + if (!fCurrentActiveBar) + return S_FALSE; + + return IUnknown_HasFocusIO(fCurrentActiveBar->fTheBar); } HRESULT STDMETHODCALLTYPE CBaseBarSite::TranslateAcceleratorIO(LPMSG lpMsg) { - return E_NOTIMPL; + if (!fCurrentActiveBar) + { + if (lpMsg) + { + TranslateMessage(lpMsg); + DispatchMessage(lpMsg); + } + return S_OK; + } + + return IUnknown_TranslateAcceleratorIO(fCurrentActiveBar->fTheBar, lpMsg); } HRESULT STDMETHODCALLTYPE CBaseBarSite::QueryService(REFGUID guidService, REFIID riid, void **ppvObject) @@ -314,7 +330,8 @@ HRESULT STDMETHODCALLTYPE CBaseBarSite::IsWindowOwner(HWND hWnd) HRESULT STDMETHODCALLTYPE CBaseBarSite::OnFocusChangeIS (IUnknown *punkObj, BOOL fSetFocus) { - return E_NOTIMPL; + // FIXME: should we directly pass-through, or advertise ourselves as focus owner ? + return IUnknown_OnFocusChangeIS(fDeskBarSite, punkObj, fSetFocus); } HRESULT STDMETHODCALLTYPE CBaseBarSite::SetDeskBarSite(IUnknown *punkSite)