Module: wine Branch: master Commit: 1ddc01c09b0aba60c21a7fa5c55fc0fd8cea5912 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1ddc01c09b0aba60c21a7fa5c5...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Nov 30 17:56:53 2009 +0100
mshtml.idl: Added DispHTMLScreen declaration and use it in HTMLScreen object.
---
dlls/mshtml/dispex.c | 2 + dlls/mshtml/htmlscreen.c | 23 ++++++++++++-- dlls/mshtml/mshtml_private.h | 2 + dlls/mshtml/tests/dom.c | 2 + include/mshtmdid.h | 10 ++++++ include/mshtml.idl | 63 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 98 insertions(+), 4 deletions(-)
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 @@ static REFIID tid_ids[] = { &DIID_DispHTMLLocation, &DIID_DispHTMLNavigator, &DIID_DispHTMLOptionElement, + &DIID_DispHTMLScreen, &DIID_DispHTMLSelectElement, &DIID_DispHTMLStyle, &DIID_DispHTMLTable, @@ -134,6 +135,7 @@ static REFIID tid_ids[] = { &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 @@ static HRESULT WINAPI HTMLScreen_QueryInterface(IHTMLScreen *iface, REFIID riid, 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 @@ static ULONG WINAPI HTMLScreen_Release(IHTMLScreen *iface)
TRACE("(%p) ref=%d\n", This, ref);
- if(!ref) + if(!ref) { + release_dispex(&This->dispex); heap_free(This); + }
return ref; } @@ -214,6 +216,17 @@ static const IHTMLScreenVtbl HTMLSreenVtbl = { 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 @@ HRESULT HTMLScreen_Create(IHTMLScreen **ret) 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 @@ typedef enum { DispHTMLLocation_tid, DispHTMLNavigator_tid, DispHTMLOptionElement_tid, + DispHTMLScreen_tid, DispHTMLSelectElement_tid, DispHTMLStyle_tid, DispHTMLTable_tid, @@ -111,6 +112,7 @@ typedef enum { 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 @@ static void test_screen(IHTMLWindow2 *window) 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 @@ interface IHTMLWindow5 : IDispatch };
/***************************************************************************** + * 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 */ [