Module: wine Branch: master Commit: fbdab049623b98b8e982da874f7be0047b5a829a URL: http://source.winehq.org/git/wine.git/?a=commit;h=fbdab049623b98b8e982da874f...
Author: Jacek Caban jacek@codeweavers.com Date: Sun Sep 9 20:17:30 2007 +0200
mshtml: Added IOleUndoManager stub implementation.
---
dlls/mshtml/htmldoc.c | 2 + dlls/mshtml/mshtml_private.h | 2 + dlls/mshtml/service.c | 182 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 186 insertions(+), 0 deletions(-)
diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c index 19da49a..5e9f0ff 100644 --- a/dlls/mshtml/htmldoc.c +++ b/dlls/mshtml/htmldoc.c @@ -160,6 +160,8 @@ static ULONG WINAPI HTMLDocument_Release(IHTMLDocument2 *iface) IOleInPlaceObjectWindowless_InPlaceDeactivate(INPLACEWIN(This)); if(This->ipsite) IOleDocumentView_SetInPlaceSite(DOCVIEW(This), NULL); + if(This->undomgr) + IOleUndoManager_Release(This->undomgr);
set_document_bscallback(This, NULL); set_current_mon(This, NULL); diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index fbe572f..1f11d7d 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -124,6 +124,8 @@ struct HTMLDocument { IOleInPlaceFrame *frame; IOleInPlaceUIWindow *ip_window;
+ IOleUndoManager *undomgr; + BSCallback *bscallback; IMoniker *mon; BSTR url; diff --git a/dlls/mshtml/service.c b/dlls/mshtml/service.c index ce4dc2e..d69c778 100644 --- a/dlls/mshtml/service.c +++ b/dlls/mshtml/service.c @@ -34,6 +34,175 @@
WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
+typedef struct { + const IOleUndoManagerVtbl *lpOleUndoManagerVtbl; + + LONG ref; +} UndoManager; + +#define UNDOMGR(x) ((IOleUndoManager*) &(x)->lpOleUndoManagerVtbl) + +#define UNDOMGR_THIS(iface) DEFINE_THIS(UndoManager, OleUndoManager, iface) + +static HRESULT WINAPI OleUndoManager_QueryInterface(IOleUndoManager *iface, REFIID riid, void **ppv) +{ + UndoManager *This = UNDOMGR_THIS(iface); + + *ppv = NULL; + + if(IsEqualGUID(riid, &IID_IUnknown)) { + TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv); + *ppv = UNDOMGR(This); + }else if(IsEqualGUID(riid, &IID_IOleUndoManager)) { + TRACE("(%p)->(IID_IOleUndoManager %p)\n", This, ppv); + *ppv = UNDOMGR(This); + } + + + FIXME("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv); + return E_NOINTERFACE; +} + +static ULONG WINAPI OleUndoManager_AddRef(IOleUndoManager *iface) +{ + UndoManager *This = UNDOMGR_THIS(iface); + LONG ref = InterlockedIncrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + return ref; +} + +static ULONG WINAPI OleUndoManager_Release(IOleUndoManager *iface) +{ + UndoManager *This = UNDOMGR_THIS(iface); + LONG ref = InterlockedDecrement(&This->ref); + + TRACE("(%p) ref=%d\n", This, ref); + + if(!ref) + mshtml_free(This); + + return ref; +} + +static HRESULT WINAPI OleUndoManager_Open(IOleUndoManager *iface, IOleParentUndoUnit *pPUU) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pPUU); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_Close(IOleUndoManager *iface, IOleParentUndoUnit *pPUU, + BOOL fCommit) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p %x)\n", This, pPUU, fCommit); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_Add(IOleUndoManager *iface, IOleUndoUnit *pUU) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pUU); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_GetOpenParentState(IOleUndoManager *iface, DWORD *pdwState) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pdwState); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_DiscardFrom(IOleUndoManager *iface, IOleUndoUnit *pUU) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pUU); + return S_OK; +} + +static HRESULT WINAPI OleUndoManager_UndoTo(IOleUndoManager *iface, IOleUndoUnit *pUU) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pUU); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_RedoTo(IOleUndoManager *iface, IOleUndoUnit *pUU) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pUU); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_EnumUndoable(IOleUndoManager *iface, + IEnumOleUndoUnits **ppEnum) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, ppEnum); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_EnumRedoable(IOleUndoManager *iface, + IEnumOleUndoUnits **ppEnum) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, ppEnum); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_GetLastUndoDescription(IOleUndoManager *iface, BSTR *pBstr) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pBstr); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_GetLastRedoDescription(IOleUndoManager *iface, BSTR *pBstr) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%p)\n", This, pBstr); + return E_NOTIMPL; +} + +static HRESULT WINAPI OleUndoManager_Enable(IOleUndoManager *iface, BOOL fEnable) +{ + UndoManager *This = UNDOMGR_THIS(iface); + FIXME("(%p)->(%x)\n", This, fEnable); + return E_NOTIMPL; +} + +#undef UNDOMGR_THIS + +static const IOleUndoManagerVtbl OleUndoManagerVtbl = { + OleUndoManager_QueryInterface, + OleUndoManager_AddRef, + OleUndoManager_Release, + OleUndoManager_Open, + OleUndoManager_Close, + OleUndoManager_Add, + OleUndoManager_GetOpenParentState, + OleUndoManager_DiscardFrom, + OleUndoManager_UndoTo, + OleUndoManager_RedoTo, + OleUndoManager_EnumUndoable, + OleUndoManager_EnumRedoable, + OleUndoManager_GetLastUndoDescription, + OleUndoManager_GetLastRedoDescription, + OleUndoManager_Enable +}; + +static IOleUndoManager *create_undomgr(void) +{ + UndoManager *ret = mshtml_alloc(sizeof(UndoManager)); + + ret->lpOleUndoManagerVtbl = &OleUndoManagerVtbl; + ret->ref = 1; + + return UNDOMGR(ret); +} + /********************************************************** * IServiceProvider impementation */ @@ -69,6 +238,17 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG return E_NOINTERFACE; }
+ if(IsEqualGUID(&IID_IOleUndoManager, riid)) { + TRACE("(%p)->(IID_IOleUndoManager %p)\n", This, ppv); + + if(!This->undomgr) + This->undomgr = create_undomgr(); + + IOleUndoManager_AddRef(This->undomgr); + *ppv = This->undomgr; + return S_OK; + } + FIXME("(%p)->(%s %s %p)\n", This, debugstr_guid(guidService), debugstr_guid(riid), ppv);
return E_UNEXPECTED; @@ -84,4 +264,6 @@ static const IServiceProviderVtbl ServiceProviderVtbl = { void HTMLDocument_Service_Init(HTMLDocument *This) { This->lpServiceProviderVtbl = &ServiceProviderVtbl; + + This->undomgr = NULL; }