Jacek Caban : vbscipt: Added IActiveScript::Close implementation.
Alexandre Julliard
julliard at winehq.org
Wed Aug 31 13:19:21 CDT 2011
Module: wine
Branch: master
Commit: 01ce1873a344bdf464a78ef83480dd1787a039d5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=01ce1873a344bdf464a78ef83480dd1787a039d5
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Aug 31 11:22:15 2011 +0200
vbscipt: Added IActiveScript::Close implementation.
---
dlls/vbscript/vbscript.c | 42 ++++++++++++++++++++++++++++++++++++++++--
1 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index b5cc9bf..6160f3b 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -19,6 +19,7 @@
#include "config.h"
#include <stdarg.h>
+#include <assert.h>
#define COBJMACROS
@@ -85,6 +86,37 @@ static void destroy_script(script_ctx_t *ctx)
heap_free(ctx);
}
+static void decrease_state(VBScript *This, SCRIPTSTATE state)
+{
+ switch(This->state) {
+ case SCRIPTSTATE_CONNECTED:
+ case SCRIPTSTATE_STARTED:
+ case SCRIPTSTATE_DISCONNECTED:
+ FIXME("unimplemented state %d\n", This->state);
+ if(state == SCRIPTSTATE_INITIALIZED)
+ break;
+ /* FALLTHROUGH */
+ case SCRIPTSTATE_INITIALIZED:
+ destroy_script(This->ctx);
+ This->ctx = NULL;
+ This->thread_id = 0;
+
+ change_state(This, state);
+ if(state == SCRIPTSTATE_UNINITIALIZED)
+ break;
+ /* FALLTHROUGH */
+ case SCRIPTSTATE_UNINITIALIZED:
+ if(This->site) {
+ IActiveScriptSite_Release(This->site);
+ This->site = NULL;
+ }
+
+ break;
+ default:
+ assert(0);
+ }
+}
+
static inline VBScript *impl_from_IActiveScript(IActiveScript *iface)
{
return CONTAINING_RECORD(iface, VBScript, IActiveScript_iface);
@@ -191,8 +223,14 @@ static HRESULT WINAPI VBScript_GetScriptState(IActiveScript *iface, SCRIPTSTATE
static HRESULT WINAPI VBScript_Close(IActiveScript *iface)
{
VBScript *This = impl_from_IActiveScript(iface);
- FIXME("(%p)->()\n", This);
- return E_NOTIMPL;
+
+ TRACE("(%p)->()\n", This);
+
+ if(This->thread_id && This->thread_id != GetCurrentThreadId())
+ return E_UNEXPECTED;
+
+ decrease_state(This, SCRIPTSTATE_CLOSED);
+ return S_OK;
}
static HRESULT WINAPI VBScript_AddNamedItem(IActiveScript *iface, LPCOLESTR pstrName, DWORD dwFlags)
More information about the wine-cvs
mailing list