Jacek Caban : mshtml: Added PutProperty implementation.

Alexandre Julliard julliard at winehq.org
Wed Jan 2 07:34:42 CST 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Dec 31 01:32:48 2007 +0100

mshtml: Added PutProperty implementation.

---

 dlls/mshtml/htmldoc.c        |    1 +
 dlls/mshtml/mshtml_private.h |   18 ++++++++++++++++++
 dlls/mshtml/navigate.c       |   14 ++++++++++++--
 dlls/mshtml/persist.c        |   21 +++++++++++++++++++--
 4 files changed, 50 insertions(+), 4 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index eb4abe0..4ce0381 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -185,6 +185,7 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface)
         if(This->window)
             IHTMLWindow2_Release(HTMLWINDOW2(This->window));
 
+        heap_free(This->mime);
         detach_selection(This);
         detach_ranges(This);
         release_nodes(This);
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 2180184..c981348 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -23,6 +23,7 @@
 #include "hlink.h"
 
 #include "wine/list.h"
+#include "wine/unicode.h"
 
 #ifdef INIT_GUID
 #include "initguid.h"
@@ -155,6 +156,7 @@ struct HTMLDocument {
     BOOL has_key_path;
     BOOL container_locked;
     BOOL focus;
+    LPWSTR mime;
 
     DWORD update;
 
@@ -561,6 +563,22 @@ static inline BOOL heap_free(void *mem)
     return HeapFree(GetProcessHeap(), 0, mem);
 }
 
+static inline LPWSTR heap_strdupW(LPCWSTR str)
+{
+    LPWSTR ret = NULL;
+
+    if(str) {
+        DWORD size;
+
+        size = (strlenW(str)+1)*sizeof(WCHAR);
+        ret = heap_alloc(size);
+        memcpy(ret, str, size);
+    }
+
+    return ret;
+}
+
+
 HINSTANCE get_shdoclc(void);
 
 extern HINSTANCE hInst;
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index b1b5609..3dd8e53 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -212,8 +212,8 @@ static HRESULT read_stream_data(BSCallback *This, IStream *stream)
             break;
 
         if(!This->readed && This->nsstream->buf_size >= 2 && *(WORD*)This->nsstream->buf == 0xfeff) {
-                This->nschannel->charset = heap_alloc(sizeof(UTF16_STR));
-                memcpy(This->nschannel->charset, UTF16_STR, sizeof(UTF16_STR));
+            This->nschannel->charset = heap_alloc(sizeof(UTF16_STR));
+            memcpy(This->nschannel->charset, UTF16_STR, sizeof(UTF16_STR));
         }
 
         if(!This->readed) {
@@ -887,6 +887,16 @@ void set_document_bscallback(HTMLDocument *doc, BSCallback *callback)
     if(callback) {
         IBindStatusCallback_AddRef(STATUSCLB(callback));
         callback->doc = doc;
+
+        if(doc->mime) {
+            DWORD len;
+
+            heap_free(callback->nschannel->content);
+
+            len = WideCharToMultiByte(CP_ACP, 0, doc->mime, -1, NULL, 0, NULL, NULL);
+            callback->nschannel->content = heap_alloc(len);
+            WideCharToMultiByte(CP_ACP, 0, doc->mime, -1, callback->nschannel->content, -1, NULL, NULL);
+        }
     }
 }
 
diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c
index 2f3d5cc..033ce7e 100644
--- a/dlls/mshtml/persist.c
+++ b/dlls/mshtml/persist.c
@@ -502,8 +502,24 @@ static ULONG WINAPI MonikerProp_Release(IMonikerProp *iface)
 static HRESULT WINAPI MonikerProp_PutProperty(IMonikerProp *iface, MONIKERPROPERTY mkp, LPCWSTR val)
 {
     HTMLDocument *This = MONPROP_THIS(iface);
-    FIXME("(%p)->(%d %s)\n", This, mkp, debugstr_w(val));
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%d %s)\n", This, mkp, debugstr_w(val));
+
+    switch(mkp) {
+    case MIMETYPEPROP:
+        heap_free(This->mime);
+        This->mime = heap_strdupW(val);
+        break;
+
+    case CLASSIDPROP:
+        break;
+
+    default:
+        FIXME("mkp %d\n", mkp);
+        return E_NOTIMPL;
+    }
+
+    return S_OK;
 }
 
 static const IMonikerPropVtbl MonikerPropVtbl = {
@@ -743,4 +759,5 @@ void HTMLDocument_Persist_Init(HTMLDocument *This)
     This->bscallback = NULL;
     This->mon = NULL;
     This->url = NULL;
+    This->mime = NULL;
 }




More information about the wine-cvs mailing list