[PATCH 4/4] shdocvw: Implement InPlaceActiveObject::TranslateAccelerator.
David Hedberg
dhedberg at codeweavers.com
Fri Nov 12 01:50:02 CST 2010
---
dlls/shdocvw/oleobject.c | 20 ++++++++++++++-
dlls/shdocvw/tests/webbrowser.c | 50 +++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 2 deletions(-)
diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c
index 933b562..281bcf4 100644
--- a/dlls/shdocvw/oleobject.c
+++ b/dlls/shdocvw/oleobject.c
@@ -824,8 +824,24 @@ static HRESULT WINAPI InPlaceActiveObject_TranslateAccelerator(IOleInPlaceActive
LPMSG lpmsg)
{
WebBrowser *This = ACTIVEOBJ_THIS(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 251a2a1..220daab 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -329,6 +329,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));
}
@@ -2595,6 +2602,7 @@ static void translate_messages(void)
static void test_TranslateAccelerator(IUnknown *unk)
{
+ IOleInPlaceActiveObject *pao;
IWebBrowser2 *pwb2;
IOleObject *pobj;
HRESULT hr;
@@ -2617,6 +2625,20 @@ static void test_TranslateAccelerator(IUnknown *unk)
return;
}
+ hr = IUnknown_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&pao);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+ if(SUCCEEDED(hr)) {
+
+ /* Before the object is activated */
+ for(keycode = 0; keycode < 255; keycode++) {
+ msg_a.message = WM_KEYDOWN;
+ msg_a.wParam = keycode;
+ hr = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
+ ok(hr == S_FALSE, "Got 0x%08x (%04x::%02x)\n", hr, WM_KEYDOWN, keycode);
+ }
+ IOleInPlaceActiveObject_Release(pao);
+ }
+
disp_html = (void*)0xdeadbeef;
hr = IWebBrowser2_get_Document(pwb2, &disp_html);
todo_wine ok(hr == S_FALSE || broken(hr == S_OK) /* < IE7 */, "Got 0x%08x\n", hr);
@@ -2731,6 +2753,34 @@ static void test_TranslateAccelerator(IUnknown *unk)
IDispatch_Release(disp_html);
}
+ hr = IUnknown_QueryInterface(unk, &IID_IOleInPlaceActiveObject, (void**)&pao);
+ ok(hr == S_OK, "Got 0x%08x\n", hr);
+ if(SUCCEEDED(hr)) {
+ /* One accelerator not handled by mshtml */
+ SET_EXPECT(DocHost_TranslateAccelerator);
+ SET_EXPECT(ControlSite_TranslateAccelerator);
+
+ msg_a.message = WM_KEYDOWN;
+ msg_a.wParam = VK_F1;
+ hr = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
+ ok(hr == S_FALSE, "Got 0x%08x (%04x::%02lx)\n", hr, msg_a.message, msg_a.wParam);
+
+ todo_wine CHECK_CALLED(DocHost_TranslateAccelerator);
+ todo_wine CHECK_CALLED(ControlSite_TranslateAccelerator);
+
+ /* And one that is */
+ SET_EXPECT(DocHost_TranslateAccelerator);
+
+ msg_a.message = WM_KEYDOWN;
+ msg_a.wParam = VK_F5;
+ hr = IOleInPlaceActiveObject_TranslateAccelerator(pao, &msg_a);
+ todo_wine ok(hr == S_OK, "Got 0x%08x (%04x::%02lx)\n", hr, msg_a.message, msg_a.wParam);
+
+ todo_wine CHECK_CALLED(DocHost_TranslateAccelerator);
+
+ IOleInPlaceActiveObject_Release(pao);
+ }
+
/* Call shdocvw _TranslateAccelerators from the other side */
disp_html = (void*)0xdeadbeef;
hr = IWebBrowser2_get_Document(pwb2, &disp_html);
--
1.7.3.2
More information about the wine-patches
mailing list