Jacek Caban : vbscript: Added SetScriptState implementation.

Alexandre Julliard julliard at winehq.org
Mon Sep 5 13:26:21 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Sep  5 11:13:54 2011 +0200

vbscript: Added SetScriptState implementation.

---

 dlls/vbscript/tests/vbscript.c |   13 +++++++++++++
 dlls/vbscript/vbscript.c       |   40 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 52 insertions(+), 1 deletions(-)

diff --git a/dlls/vbscript/tests/vbscript.c b/dlls/vbscript/tests/vbscript.c
index ff167b7..76d90a9 100644
--- a/dlls/vbscript/tests/vbscript.c
+++ b/dlls/vbscript/tests/vbscript.c
@@ -326,9 +326,22 @@ static void test_vbscript(void)
     hres = IActiveScriptParse64_InitNew(parser);
     ok(hres == E_UNEXPECTED, "InitNew failed: %08x, expected E_UNEXPECTED\n", hres);
 
+    SET_EXPECT(OnStateChange_CONNECTED);
+    hres = IActiveScript_SetScriptState(vbscript, SCRIPTSTATE_CONNECTED);
+    ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08x\n", hres);
+    CHECK_CALLED(OnStateChange_CONNECTED);
+
+    test_state(vbscript, SCRIPTSTATE_CONNECTED);
+
+    SET_EXPECT(OnStateChange_DISCONNECTED);
+    SET_EXPECT(OnStateChange_INITIALIZED);
     SET_EXPECT(OnStateChange_CLOSED);
     hres = IActiveScript_Close(vbscript);
     ok(hres == S_OK, "Close failed: %08x\n", hres);
+    todo_wine
+    CHECK_CALLED(OnStateChange_DISCONNECTED);
+    todo_wine
+    CHECK_CALLED(OnStateChange_INITIALIZED);
     CHECK_CALLED(OnStateChange_CLOSED);
 
     test_state(vbscript, SCRIPTSTATE_CLOSED);
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index b50cbd6..08e715a 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -63,6 +63,11 @@ static void change_state(VBScript *This, SCRIPTSTATE state)
         IActiveScriptSite_OnStateChange(This->site, state);
 }
 
+static void exec_queued_code(VBScript *This)
+{
+    FIXME("\n");
+}
+
 static HRESULT set_ctx_site(VBScript *This)
 {
     This->ctx->lcid = This->lcid;
@@ -207,7 +212,40 @@ static HRESULT WINAPI VBScript_GetScriptSite(IActiveScript *iface, REFIID riid,
 static HRESULT WINAPI VBScript_SetScriptState(IActiveScript *iface, SCRIPTSTATE ss)
 {
     VBScript *This = impl_from_IActiveScript(iface);
-    FIXME("(%p)->(%d)\n", This, ss);
+
+    TRACE("(%p)->(%d)\n", This, ss);
+
+    if(This->thread_id && GetCurrentThreadId() != This->thread_id)
+        return E_UNEXPECTED;
+
+    if(ss == SCRIPTSTATE_UNINITIALIZED) {
+        if(This->state == SCRIPTSTATE_CLOSED)
+            return E_UNEXPECTED;
+
+        decrease_state(This, SCRIPTSTATE_UNINITIALIZED);
+        return S_OK;
+    }
+
+    if(!This->ctx)
+        return E_UNEXPECTED;
+
+    switch(ss) {
+    case SCRIPTSTATE_STARTED:
+    case SCRIPTSTATE_CONNECTED: /* FIXME */
+        if(This->state == SCRIPTSTATE_CLOSED)
+            return E_UNEXPECTED;
+
+        exec_queued_code(This);
+        break;
+    case SCRIPTSTATE_INITIALIZED:
+        FIXME("unimplemented SCRIPTSTATE_INITIALIZED\n");
+        return S_OK;
+    default:
+        FIXME("unimplemented state %d\n", ss);
+        return E_NOTIMPL;
+    }
+
+    change_state(This, ss);
     return S_OK;
 }
 




More information about the wine-cvs mailing list