David Hedberg : shdocvw: Implement InPlaceActiveObject:: TranslateAccelerator.

Alexandre Julliard julliard at winehq.org
Wed Nov 17 10:38:06 CST 2010


Module: wine
Branch: master
Commit: 155877e4fffc6866fd39cf2270ca7285a2c32680
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=155877e4fffc6866fd39cf2270ca7285a2c32680

Author: David Hedberg <dhedberg at 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)




More information about the wine-cvs mailing list