Jacek Caban : shdocvw: Added WebBrowser::TheaterMode implementation.

Alexandre Julliard julliard at winehq.org
Mon Feb 25 06:50:51 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Feb 22 11:34:06 2008 +0100

shdocvw: Added WebBrowser::TheaterMode implementation.

---

 dlls/shdocvw/shdocvw.h          |    1 +
 dlls/shdocvw/tests/webbrowser.c |   35 +++++++++++++++++++++++++++++++++++
 dlls/shdocvw/webbrowser.c       |   25 +++++++++++++++++++++----
 3 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index bc4c2a1..af647a1 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -144,6 +144,7 @@ struct WebBrowser {
     VARIANT_BOOL status_bar;
     VARIANT_BOOL tool_bar;
     VARIANT_BOOL full_screen;
+    VARIANT_BOOL theater_mode;
 
     DocHost doc_host;
 };
diff --git a/dlls/shdocvw/tests/webbrowser.c b/dlls/shdocvw/tests/webbrowser.c
index 1ec3de3..0f337ed 100644
--- a/dlls/shdocvw/tests/webbrowser.c
+++ b/dlls/shdocvw/tests/webbrowser.c
@@ -89,6 +89,7 @@ DEFINE_EXPECT(Invoke_ONADDRESSBAR);
 DEFINE_EXPECT(Invoke_ONSTATUSBAR);
 DEFINE_EXPECT(Invoke_ONTOOLBAR);
 DEFINE_EXPECT(Invoke_ONFULLSCREEN);
+DEFINE_EXPECT(Invoke_ONTHEATERMODE);
 DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE);
 DEFINE_EXPECT(EnableModeless_TRUE);
 DEFINE_EXPECT(EnableModeless_FALSE);
@@ -620,6 +621,11 @@ static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMe
         test_invoke_bool(pDispParams);
         break;
 
+    case DISPID_ONTHEATERMODE:
+        CHECK_EXPECT(Invoke_ONTHEATERMODE);
+        test_invoke_bool(pDispParams);
+        break;
+
     case DISPID_WINDOWSETRESIZABLE:
         CHECK_EXPECT(Invoke_WINDOWSETRESIZABLE);
         test_invoke_bool(pDispParams);
@@ -1575,6 +1581,35 @@ static void test_ie_funcs(IUnknown *unk)
     ok(hres == S_OK, "put_FullScreen failed: %08x\n", hres);
     CHECK_CALLED(Invoke_ONFULLSCREEN);
 
+    /* TheaterMode */
+
+    hres = IWebBrowser2_get_TheaterMode(wb, &b);
+    ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
+    ok(b == VARIANT_FALSE, "b=%x\n", b);
+
+    SET_EXPECT(Invoke_ONTHEATERMODE);
+    hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_TRUE));
+    ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
+    CHECK_CALLED(Invoke_ONTHEATERMODE);
+
+    hres = IWebBrowser2_get_TheaterMode(wb, &b);
+    ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
+    ok(b == VARIANT_TRUE, "b=%x\n", b);
+
+    SET_EXPECT(Invoke_ONTHEATERMODE);
+    hres = IWebBrowser2_put_TheaterMode(wb, (exvb = 100));
+    ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
+    CHECK_CALLED(Invoke_ONTHEATERMODE);
+
+    hres = IWebBrowser2_get_TheaterMode(wb, &b);
+    ok(hres == S_OK, "get_TheaterMode failed: %08x\n", hres);
+    ok(b == VARIANT_TRUE, "b=%x\n", b);
+
+    SET_EXPECT(Invoke_ONTHEATERMODE);
+    hres = IWebBrowser2_put_TheaterMode(wb, (exvb = VARIANT_FALSE));
+    ok(hres == S_OK, "put_TheaterMode failed: %08x\n", hres);
+    CHECK_CALLED(Invoke_ONTHEATERMODE);
+
     /* Resizable */
 
     b = 0x100;
diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c
index 2c4d36d..95586f0 100644
--- a/dlls/shdocvw/webbrowser.c
+++ b/dlls/shdocvw/webbrowser.c
@@ -817,15 +817,31 @@ static HRESULT WINAPI WebBrowser_put_RegisterAsDropTarget(IWebBrowser2 *iface,
 static HRESULT WINAPI WebBrowser_get_TheaterMode(IWebBrowser2 *iface, VARIANT_BOOL *pbRegister)
 {
     WebBrowser *This = WEBBROWSER_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, pbRegister);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, pbRegister);
+
+    *pbRegister = This->theater_mode;
+    return S_OK;
 }
 
 static HRESULT WINAPI WebBrowser_put_TheaterMode(IWebBrowser2 *iface, VARIANT_BOOL bRegister)
 {
     WebBrowser *This = WEBBROWSER_THIS(iface);
-    FIXME("(%p)->(%x)\n", This, bRegister);
-    return E_NOTIMPL;
+    VARIANTARG arg;
+    DISPPARAMS dispparams = {&arg, NULL, 1, 0};
+
+    TRACE("(%p)->(%x)\n", This, bRegister);
+
+    This->theater_mode = bRegister ? VARIANT_TRUE : VARIANT_FALSE;
+
+    /* In opposition to InternetExplorer, all we should do here is
+     * inform the embedder about the theater mode change. */
+
+    V_VT(&arg) = VT_BOOL;
+    V_BOOL(&arg) = bRegister;
+    call_sink(This->doc_host.cps.wbe2, DISPID_ONTHEATERMODE, &dispparams);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI WebBrowser_get_AddressBar(IWebBrowser2 *iface, VARIANT_BOOL *Value)
@@ -984,6 +1000,7 @@ static HRESULT WebBrowser_Create(INT version, IUnknown *pOuter, REFIID riid, voi
     ret->status_bar = VARIANT_TRUE;
     ret->tool_bar = VARIANT_TRUE;
     ret->full_screen = VARIANT_FALSE;
+    ret->theater_mode = VARIANT_FALSE;
 
     WebBrowser_OleObject_Init(ret);
     WebBrowser_ViewObject_Init(ret);




More information about the wine-cvs mailing list