Jacek Caban : mshtml: Added IOleUndoManager stub implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Sep 10 10:18:04 CDT 2007
Module: wine
Branch: master
Commit: fbdab049623b98b8e982da874f7be0047b5a829a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fbdab049623b98b8e982da874f7be0047b5a829a
Author: Jacek Caban <jacek at 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;
}
More information about the wine-cvs
mailing list