[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