mshtml.idl: Added DispHTMLScreen declaration and use it in HTMLScreen object.
diff --git a/dlls/mshtml/dispex.c b/dlls/mshtml/dispex.c
index f93fc8c..f26f897 100644
--- a/dlls/mshtml/dispex.c
+++ b/dlls/mshtml/dispex.c
@@ -97,6 +97,7 @@
&DIID_DispHTMLLocation,
&DIID_DispHTMLNavigator,
&DIID_DispHTMLOptionElement,
+ &DIID_DispHTMLScreen,
&DIID_DispHTMLSelectElement,
&DIID_DispHTMLStyle,
&DIID_DispHTMLTable,
@@ -134,6 +135,7 @@
&IID_IHTMLInputElement,
&IID_IHTMLLocation,
&IID_IHTMLOptionElement,
+ &IID_IHTMLScreen,
&IID_IHTMLSelectElement,
&IID_IHTMLStyle,
&IID_IHTMLStyle2,
diff --git a/dlls/mshtml/htmlscreen.c b/dlls/mshtml/htmlscreen.c
index 0ac9801..b504b20 100644
--- a/dlls/mshtml/htmlscreen.c
+++ b/dlls/mshtml/htmlscreen.c
@@ -32,6 +32,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
typedef struct {
+ DispatchEx dispex;
const IHTMLScreenVtbl *lpIHTMLScreenVtbl;
LONG ref;
@@ -50,12 +51,11 @@
if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = HTMLSCREEN(This);
- }else if(IsEqualGUID(&IID_IDispatch, riid)) {
- TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
- *ppv = HTMLSCREEN(This);
}else if(IsEqualGUID(&IID_IHTMLScreen, riid)) {
TRACE("(%p)->(IID_IHTMLScreen %p)\n", This, ppv);
*ppv = HTMLSCREEN(This);
+ }else if(dispex_query_interface(&This->dispex, riid, ppv)) {
+ return *ppv ? S_OK : E_NOINTERFACE;
}
if(*ppv) {
@@ -84,8 +84,10 @@
TRACE("(%p) ref=%d\n", This, ref);
- if(!ref)
+ if(!ref) {
+ release_dispex(&This->dispex);
heap_free(This);
+ }
return ref;
}
@@ -214,6 +216,17 @@
HTMLScreen_get_fontSmoothingEnabled
};
+static const tid_t HTMLScreen_iface_tids[] = {
+ IHTMLScreen_tid,
+ 0
+};
+static dispex_static_data_t HTMLScreen_dispex = {
+ NULL,
+ DispHTMLScreen_tid,
+ NULL,
+ HTMLScreen_iface_tids
+};
+
HRESULT HTMLScreen_Create(IHTMLScreen **ret)
{
HTMLScreen *screen;
@@ -225,6 +238,8 @@
screen->lpIHTMLScreenVtbl = &HTMLSreenVtbl;
screen->ref = 1;
+ init_dispex(&screen->dispex, (IUnknown*)HTMLSCREEN(screen), &HTMLScreen_dispex);
+
*ret = HTMLSCREEN(screen);
return S_OK;
}
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 8ccc402..33f9c96 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -74,6 +74,7 @@
DispHTMLLocation_tid,
DispHTMLNavigator_tid,
DispHTMLOptionElement_tid,
+ DispHTMLScreen_tid,
DispHTMLSelectElement_tid,
DispHTMLStyle_tid,
DispHTMLTable_tid,
@@ -111,6 +112,7 @@
IHTMLInputElement_tid,
IHTMLLocation_tid,
IHTMLOptionElement_tid,
+ IHTMLScreen_tid,
IHTMLSelectElement_tid,
IHTMLStyle_tid,
IHTMLStyle2_tid,
diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c
index 86e74c3..bc012f5 100644
--- a/dlls/mshtml/tests/dom.c
+++ b/dlls/mshtml/tests/dom.c
@@ -3049,6 +3049,8 @@
ok(iface_cmp((IUnknown*)screen2, (IUnknown*)screen), "screen2 != screen\n");
IHTMLScreen_Release(screen2);
+ test_disp((IUnknown*)screen, &DIID_DispHTMLScreen, "[object]");
+
IHTMLScreen_Release(screen);
}
diff --git a/include/mshtmdid.h b/include/mshtmdid.h
index 59b04a4..36bc870 100644
--- a/include/mshtmdid.h
+++ b/include/mshtmdid.h
@@ -1781,6 +1781,16 @@
#define DISPID_IHTMLSCREEN_AVAILWIDTH (DISPID_SCREEN+7)
#define DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED (DISPID_SCREEN+8)
+/* IHTMLScreen2 */
+#define DISPID_IHTMLSCREEN2_LOGICALXDPI DISPID_SCREEN+9
+#define DISPID_IHTMLSCREEN2_LOGICALYDPI DISPID_SCREEN+10
+#define DISPID_IHTMLSCREEN2_DEVICEXDPI DISPID_SCREEN+11
+#define DISPID_IHTMLSCREEN2_DEVICEYDPI DISPID_SCREEN+12
+
+/* IHTMLScreen3 */
+#define DISPID_IHTMLSCREEN3_SYSTEMXDPI DISPID_SCREEN+13
+#define DISPID_IHTMLSCREEN3_SYSTEMYDPI DISPID_SCREEN+14
+
/* IHTMLOptionElementFactory */
#define DISPID_IHTMLOPTIONELEMENTFACTORY_CREATE DISPID_VALUE
diff --git a/include/mshtml.idl b/include/mshtml.idl
index f004e74..68f6478 100644
--- a/include/mshtml.idl
+++ b/include/mshtml.idl
@@ -9759,6 +9759,69 @@
};
/*****************************************************************************
+ * DispHTMLScreen dispinterface
+ */
+[
+ hidden,
+ uuid(3050f591-98b5-11cf-bb82-00aa00bdce0b)
+]
+dispinterface DispHTMLScreen
+{
+properties:
+methods:
+ [propget, id(DISPID_IHTMLSCREEN_COLORDEPTH)]
+ long colorDepth();
+
+ [propput, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+ void bufferDepth(long v);
+
+ [propget, id(DISPID_IHTMLSCREEN_BUFFERDEPTH)]
+ long bufferDepth();
+
+ [propget, id(DISPID_IHTMLSCREEN_WIDTH)]
+ long width();
+
+ [propget, id(DISPID_IHTMLSCREEN_HEIGHT)]
+ long height();
+
+ [propput, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+ void updateInterval(long v);
+
+ [propget, id(DISPID_IHTMLSCREEN_UPDATEINTERVAL)]
+ long updateInterval();
+
+ [propget, id(DISPID_IHTMLSCREEN_AVAILHEIGHT)]
+ long availHeight();
+
+ [propget, id(DISPID_IHTMLSCREEN_AVAILWIDTH)]
+ long availWidth();
+
+ [propget, id(DISPID_IHTMLSCREEN_FONTSMOOTHINGENABLED)]
+ VARIANT_BOOL fontSmoothingEnabled();
+
+ [propget, id(DISPID_IHTMLSCREEN2_LOGICALXDPI)]
+ long logicalXDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN2_LOGICALYDPI)]
+ long logicalYDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN2_DEVICEXDPI)]
+ long deviceXDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN2_DEVICEYDPI)]
+ long deviceYDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN3_SYSTEMXDPI)]
+ long systemXDPI();
+
+ [propget, id(DISPID_IHTMLSCREEN3_SYSTEMYDPI)]
+ long systemYDPI();
+
+ [propget, id(DISPID_IHTMLDOMCONSTRUCTOR_CONSTRUCTOR), hidden]
+ IDispatch *constructor();
+}
+
+/*****************************************************************************
* DispHTMLWindow2 dispinterface
*/
[