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