Jacek Caban : mshtml: Added VT_BSTR support to IHTMLWindow3::setTimeout.

Alexandre Julliard julliard at winehq.org
Mon Jun 30 08:26:36 CDT 2008


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jun 27 14:10:04 2008 -0500

mshtml: Added VT_BSTR support to IHTMLWindow3::setTimeout.

Resend without test depending on JScript.

---

 dlls/mshtml/htmlwindow.c |   35 +++++++++++++++++++++++++++--------
 1 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 6e1d092..32e0689 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -841,25 +841,44 @@ static HRESULT WINAPI HTMLWindow3_detachEvent(IHTMLWindow3 *iface, BSTR event, I
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI HTMLWindow3_setTimeout(IHTMLWindow3 *iface, VARIANT *expression, long msec,
-        VARIANT *language, long *timerID)
+static HRESULT window_set_timer(HTMLWindow *This, VARIANT *expr, long msec, VARIANT *language, long *timer_id)
 {
-    HTMLWindow *This = HTMLWINDOW3_THIS(iface);
-
-    TRACE("(%p)->(%p(%d) %ld %p %p)\n", This, expression, V_VT(expression), msec, language, timerID);
+    IDispatch *disp = NULL;
 
-    switch(V_VT(expression)) {
+    switch(V_VT(expr)) {
     case VT_DISPATCH:
-        *timerID = set_task_timer(This->doc, msec, V_DISPATCH(expression));
+        disp = V_DISPATCH(expr);
+        IDispatch_AddRef(disp);
+        break;
+
+    case VT_BSTR:
+        disp = script_parse_event(This->doc, V_BSTR(expr));
         break;
 
     default:
-        FIXME("unimplemented vt=%d\n", V_VT(expression));
+        FIXME("unimplemented vt=%d\n", V_VT(expr));
+        return E_NOTIMPL;
     }
 
+    if(!disp)
+        return E_FAIL;
+
+    *timer_id = set_task_timer(This->doc, msec, disp);
+    IDispatch_Release(disp);
+
     return S_OK;
 }
 
+static HRESULT WINAPI HTMLWindow3_setTimeout(IHTMLWindow3 *iface, VARIANT *expression, long msec,
+        VARIANT *language, long *timerID)
+{
+    HTMLWindow *This = HTMLWINDOW3_THIS(iface);
+
+    TRACE("(%p)->(%p(%d) %ld %p %p)\n", This, expression, V_VT(expression), msec, language, timerID);
+
+    return window_set_timer(This, expression, msec, language, timerID);
+}
+
 static HRESULT WINAPI HTMLWindow3_setInterval(IHTMLWindow3 *iface, VARIANT *expression, long msec,
         VARIANT *language, long *timerID)
 {




More information about the wine-cvs mailing list