Zhenbo Li : mshtml: Added IHTMLStyle::listStyle property implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 21 15:42:12 CDT 2014


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

Author: Zhenbo Li <litimetal at gmail.com>
Date:   Wed Aug 20 21:35:43 2014 +0800

mshtml: Added IHTMLStyle::listStyle property implementation.

---

 dlls/mshtml/htmlstyle.c   | 15 +++++++++++----
 dlls/mshtml/htmlstyle.h   |  1 +
 dlls/mshtml/tests/style.c | 34 ++++++++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/htmlstyle.c b/dlls/mshtml/htmlstyle.c
index 9c9c96e..aa19da7 100644
--- a/dlls/mshtml/htmlstyle.c
+++ b/dlls/mshtml/htmlstyle.c
@@ -128,6 +128,8 @@ static const WCHAR attrLetterSpacing[] =
     {'l','e','t','t','e','r','-','s','p','a','c','i','n','g',0};
 static const WCHAR attrLineHeight[] =
     {'l','i','n','e','-','h','e','i','g','h','t',0};
+static const WCHAR attrListStyle[] =
+    {'l','i','s','t','-','s','t','y','l','e',0};
 static const WCHAR attrListStyleType[] =
     {'l','i','s','t','-','s','t','y','l','e','-','t','y','p','e',0};
 static const WCHAR attrListStylePosition[] =
@@ -252,6 +254,7 @@ static const style_tbl_entry_t style_tbl[] = {
     {attrLeft,                 DISPID_IHTMLSTYLE_LEFT},
     {attrLetterSpacing,        DISPID_IHTMLSTYLE_LETTERSPACING},
     {attrLineHeight,           DISPID_IHTMLSTYLE_LINEHEIGHT},
+    {attrListStyle,            DISPID_IHTMLSTYLE_LISTSTYLE},
     {attrListStylePosition,    DISPID_IHTMLSTYLE_LISTSTYLEPOSITION},
     {attrListStyleType,        DISPID_IHTMLSTYLE_LISTSTYLETYPE},
     {attrMargin,               DISPID_IHTMLSTYLE_MARGIN},
@@ -2241,15 +2244,19 @@ static HRESULT WINAPI HTMLStyle_get_listStyleImage(IHTMLStyle *iface, BSTR *p)
 static HRESULT WINAPI HTMLStyle_put_listStyle(IHTMLStyle *iface, BSTR v)
 {
     HTMLStyle *This = impl_from_IHTMLStyle(iface);
-    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%s)\n", This, debugstr_w(v));
+
+    return set_style_attr(This, STYLEID_LIST_STYLE, v, 0);
 }
 
 static HRESULT WINAPI HTMLStyle_get_listStyle(IHTMLStyle *iface, BSTR *p)
 {
     HTMLStyle *This = impl_from_IHTMLStyle(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    return get_style_attr(This, STYLEID_LIST_STYLE, p);
 }
 
 static HRESULT WINAPI HTMLStyle_put_whiteSpace(IHTMLStyle *iface, BSTR v)
diff --git a/dlls/mshtml/htmlstyle.h b/dlls/mshtml/htmlstyle.h
index 9b44a30..3c6bb6c 100644
--- a/dlls/mshtml/htmlstyle.h
+++ b/dlls/mshtml/htmlstyle.h
@@ -79,6 +79,7 @@ typedef enum {
     STYLEID_LEFT,
     STYLEID_LETTER_SPACING,
     STYLEID_LINE_HEIGHT,
+    STYLEID_LIST_STYLE,
     STYLEID_LISTSTYLEPOSITION,
     STYLEID_LISTSTYLETYPE,
     STYLEID_MARGIN,
diff --git a/dlls/mshtml/tests/style.c b/dlls/mshtml/tests/style.c
index 94226e1..5297246 100644
--- a/dlls/mshtml/tests/style.c
+++ b/dlls/mshtml/tests/style.c
@@ -59,6 +59,22 @@ static BSTR a2bstr(const char *str)
     return ret;
 }
 
+static const WCHAR *strstr_wa(const WCHAR *str, const char *suba)
+{
+    BSTR sub;
+    const WCHAR *ret = NULL;
+    sub = a2bstr(suba);
+    while (*str)
+    {
+        const WCHAR *p1 = str, *p2 = sub;
+        while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }
+        if (!*p2) {ret = str; break;}
+        str++;
+    }
+    SysFreeString(sub);
+    return ret;
+}
+
 #define test_var_bstr(a,b) _test_var_bstr(__LINE__,a,b)
 static void _test_var_bstr(unsigned line, const VARIANT *v, const char *expect)
 {
@@ -2194,6 +2210,24 @@ static void test_body_style(IHTMLStyle *style)
     ok(!strcmp_wa(str, "inside"), "listStyleType = %s\n", wine_dbgstr_w(str));
     SysFreeString(str);
 
+    str = a2bstr("decimal-leading-zero none inside");
+    hres = IHTMLStyle_put_listStyle(style, str);
+    ok(hres == S_OK || broken(hres == E_INVALIDARG), /* win 2000 */
+        "put_listStyle(%s) failed: %08x\n", wine_dbgstr_w(str), hres);
+    SysFreeString(str);
+
+    if (hres != E_INVALIDARG) {
+        hres = IHTMLStyle_get_listStyle(style, &str);
+        ok(hres == S_OK, "get_listStyle failed: %08x\n", hres);
+        ok(strstr_wa(str, "decimal-leading-zero") == str &&
+           strstr_wa(str, "none") != NULL &&
+           strstr_wa(str, "inside") != NULL,
+            "listStyle = %s\n", wine_dbgstr_w(str));
+        SysFreeString(str);
+    }  else {
+        win_skip("IHTMLStyle_put_listStyle already failed\n");
+    }
+
     hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
     ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
     if(SUCCEEDED(hres)) {




More information about the wine-cvs mailing list