Module: wine Branch: master Commit: 155877e4fffc6866fd39cf2270ca7285a2c32680 URL: http://source.winehq.org/git/wine.git/?a=commit;h=155877e4fffc6866fd39cf2270...
Author: David Hedberg dhedberg@codeweavers.com Date: Wed Nov 17 13:12:22 2010 +0100
shdocvw: Implement InPlaceActiveObject::TranslateAccelerator.
---
dlls/shdocvw/oleobject.c | 20 +++++++- dlls/shdocvw/tests/webbrowser.c | 94 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c index 4a777d0..923107f 100644 --- a/dlls/shdocvw/oleobject.c +++ b/dlls/shdocvw/oleobject.c @@ -830,8 +830,24 @@ static HRESULT WINAPI InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActive LPMSG lpmsg) { WebBrowser *This = impl_from_IOleInPlaceActiveObject(iface); - FIXME("(%p)->(%p)\n", This, lpmsg); - return E_NOTIMPL; + IOleInPlaceActiveObject *activeobj; + HRESULT hr = S_FALSE; + + TRACE("(%p)->(%p)\n", This, lpmsg); + + if(This->doc_host.document) { + if(SUCCEEDED(IUnknown_QueryInterface(This->doc_host.document, + &IID_IOleInPlaceActiveObject, + (void**)&activeobj))) { + hr = IOleInPlaceActiveObject_TranslateAccelerator(activeobj, lpmsg); + IOleInPlaceActiveObject_Release(activeobj); + } + } + + if(SUCCEEDED(hr)) + return hr; + else + return S_FALSE; }
static HRESULT WINAPI InPlaceActiveObject_OnFrameWindowActivate(IOleInPlaceActiveObject *iface, diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c index 6f84eee..8f0902f 100644 --- a/dlls/shdocvw/tests/webbrowser.c +++ b/dlls/shdocvw/tests/webbrowser.c @@ -337,6 +337,13 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID default: ok(0, "unexpected nCmdID %d of CGID_DocHostCmdPriv\n", nCmdID); } + }else if(IsEqualGUID(&CGID_DocHostCommandHandler, pguidCmdGroup)) { + switch(nCmdID) { + case 6041: /* TODO */ + break; + default: + ok(0, "unexpected nCmdID %d of CGID_DocHostCommandHandler\n", nCmdID); + } }else { ok(0, "unexpected pguidCmdGroup %s\n", debugstr_guid(pguidCmdGroup)); } @@ -2598,8 +2605,48 @@ static void test_QueryInterface(IUnknown *unk)
}
+static void test_UIActivate(IUnknown *unk, BOOL activate) +{ + IOleDocumentView *docview; + IDispatch *disp; + HRESULT hres; + + disp = get_document(unk); + + hres = IDispatch_QueryInterface(disp, &IID_IOleDocumentView, (void**)&docview); + ok(hres == S_OK, "Got 0x%08x\n", hres); + if(SUCCEEDED(hres)) { + if(activate) { + SET_EXPECT(RequestUIActivate); + SET_EXPECT(ShowUI); + SET_EXPECT(HideUI); + SET_EXPECT(OnFocus); + } + + hres = IOleDocumentView_UIActivate(docview, activate); + if(activate) + todo_wine ok(hres == S_OK, "Got 0x%08x\n", hres); + else + ok(hres == S_OK, "Got 0x%08x\n", hres); + + if(activate) { + todo_wine { + CHECK_CALLED(RequestUIActivate); + CHECK_CALLED(ShowUI); + CHECK_CALLED(HideUI); + CHECK_CALLED(OnFocus); + } + } + + IOleDocumentView_Release(docview); + } + + IDispatch_Release(disp); +} + static void test_TranslateAccelerator(IUnknown *unk) { + IOleInPlaceActiveObject *pao; IOleObject *obj_doc; IDispatch *disp_doc; HRESULT hres; @@ -2613,6 +2660,51 @@ static void test_TranslateAccelerator(IUnknown *unk)
test_Navigate2(unk);
+ hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&pao); + ok(hres == S_OK, "Got 0x%08x\n", hres); + if(SUCCEEDED(hres)) { + /* One accelerator that should be handled by mshtml */ + msg_a.message = WM_KEYDOWN; + msg_a.wParam = VK_F1; + hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a); + ok(hres == S_FALSE, "Got 0x%08x (%04x::%02lx)\n", hres, msg_a.message, msg_a.wParam); + + /* And one that should not */ + msg_a.message = WM_KEYDOWN; + msg_a.wParam = VK_F5; + hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a); + ok(hres == S_FALSE, "Got 0x%08x (%04x::%02lx)\n", hres, msg_a.message, msg_a.wParam); + + IOleInPlaceActiveObject_Release(pao); + } + + test_UIActivate(unk, TRUE); + + /* Test again after UIActivate */ + hres = IUnknown_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&pao); + ok(hres == S_OK, "Got 0x%08x\n", hres); + if(SUCCEEDED(hres)) { + /* One accelerator that should be handled by mshtml */ + msg_a.message = WM_KEYDOWN; + msg_a.wParam = VK_F1; + SET_EXPECT(DocHost_TranslateAccelerator); + SET_EXPECT(ControlSite_TranslateAccelerator); + hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a); + ok(hres == S_FALSE, "Got 0x%08x (%04x::%02lx)\n", hres, msg_a.message, msg_a.wParam); + todo_wine CHECK_CALLED(DocHost_TranslateAccelerator); + todo_wine CHECK_CALLED(ControlSite_TranslateAccelerator); + + /* And one that should not */ + msg_a.message = WM_KEYDOWN; + msg_a.wParam = VK_F5; + SET_EXPECT(DocHost_TranslateAccelerator); + hres = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a); + todo_wine ok(hres == S_OK, "Got 0x%08x (%04x::%02lx)\n", hres, msg_a.message, msg_a.wParam); + todo_wine CHECK_CALLED(DocHost_TranslateAccelerator); + + IOleInPlaceActiveObject_Release(pao); + } + disp_doc = get_document(unk); hres = IDispatch_QueryInterface(disp_doc, &IID_IOleObject, (void**)&obj_doc); ok(hres == S_OK, "Got 0x%08x\n", hres); @@ -2704,6 +2796,8 @@ static void test_TranslateAccelerator(IUnknown *unk) }
IDispatch_Release(disp_doc); + + test_UIActivate(unk, FALSE); }
static void test_WebBrowser(BOOL do_download)