Jacek Caban : mshtml.idl: Added DispHTMLScreen declaration and use it in HTMLScreen object.

Alexandre Julliard julliard at winehq.org
Tue Dec 1 09:19:38 CST 2009


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

Author: Jacek Caban <jacek at 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
  */
 [




More information about the wine-cvs mailing list