Jacek Caban : jscript: Added IActiveScript::SetScriptSite.
Alexandre Julliard
julliard at winehq.org
Wed Sep 3 07:43:23 CDT 2008
Module: wine
Branch: master
Commit: 268a92bed244416b8b049ea41aee557d26539c82
URL: http://source.winehq.org/git/wine.git/?a=commit;h=268a92bed244416b8b049ea41aee557d26539c82
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Sep 1 01:17:14 2008 +0200
jscript: Added IActiveScript::SetScriptSite.
---
dlls/jscript/jscript.c | 45 +++++++++++++++++++++++++++++++++++++++++++--
dlls/jscript/jscript.h | 1 +
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/dlls/jscript/jscript.c b/dlls/jscript/jscript.c
index 8e3f752..d70db46 100644
--- a/dlls/jscript/jscript.c
+++ b/dlls/jscript/jscript.c
@@ -34,6 +34,9 @@ typedef struct {
DWORD safeopt;
script_ctx_t *ctx;
+ LONG thread_id;
+
+ IActiveScriptSite *site;
} JScript;
#define ACTSCRIPT(x) ((IActiveScript*) &(x)->lpIActiveScriptVtbl)
@@ -50,6 +53,15 @@ void script_release(script_ctx_t *ctx)
heap_free(ctx);
}
+static void change_state(JScript *This, SCRIPTSTATE state)
+{
+ if(This->ctx->state == state)
+ return;
+
+ This->ctx->state = state;
+ IActiveScriptSite_OnStateChange(This->site, state);
+}
+
#define ACTSCRIPT_THIS(iface) DEFINE_THIS(JScript, IActiveScript, iface)
static HRESULT WINAPI JScript_QueryInterface(IActiveScript *iface, REFIID riid, void **ppv)
@@ -110,6 +122,8 @@ static ULONG WINAPI JScript_Release(IActiveScript *iface)
if(!ref) {
if(This->ctx)
script_release(This->ctx);
+ if(This->site)
+ IActiveScriptSite_Release(This->site);
heap_free(This);
unlock_module();
}
@@ -121,8 +135,35 @@ static HRESULT WINAPI JScript_SetScriptSite(IActiveScript *iface,
IActiveScriptSite *pass)
{
JScript *This = ACTSCRIPT_THIS(iface);
- FIXME("(%p)->(%p)\n", This, pass);
- return E_NOTIMPL;
+ LCID lcid;
+ HRESULT hres;
+
+ TRACE("(%p)->(%p)\n", This, pass);
+
+ if(!pass)
+ return E_POINTER;
+
+ if(This->site)
+ return E_UNEXPECTED;
+
+ if(!This->ctx) {
+ hres = IActiveScriptParse_InitNew(ASPARSE(This));
+ if(FAILED(hres))
+ return hres;
+ }
+
+ if(InterlockedCompareExchange(&This->thread_id, GetCurrentThreadId(), 0))
+ return E_UNEXPECTED;
+
+ This->site = pass;
+ IActiveScriptSite_AddRef(This->site);
+
+ hres = IActiveScriptSite_GetLCID(This->site, &lcid);
+ if(hres == S_OK)
+ This->ctx->lcid = lcid;
+
+ change_state(This, SCRIPTSTATE_INITIALIZED);
+ return S_OK;
}
static HRESULT WINAPI JScript_GetScriptSite(IActiveScript *iface, REFIID riid,
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 98948bc..455dee8 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -33,6 +33,7 @@ struct _script_ctx_t {
LONG ref;
SCRIPTSTATE state;
+ LCID lcid;
};
HRESULT WINAPI JScriptFactory_CreateInstance(IClassFactory*,IUnknown*,REFIID,void**);
More information about the wine-cvs
mailing list