Module: wine Branch: master Commit: 92202feff3c46585c552cc439c5584074cf58a1b URL: http://source.winehq.org/git/wine.git/?a=commit;h=92202feff3c46585c552cc439c...
Author: Huw Davies huw@codeweavers.com Date: Thu Oct 23 10:25:24 2008 +0100
ole32: Call the appropriate storage function when we run the object.
---
dlls/ole32/defaulthandler.c | 51 ++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 50 insertions(+), 1 deletions(-)
diff --git a/dlls/ole32/defaulthandler.c b/dlls/ole32/defaulthandler.c index ce44aec..49bb733 100644 --- a/dlls/ole32/defaulthandler.c +++ b/dlls/ole32/defaulthandler.c @@ -64,6 +64,13 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
+enum storage_state +{ + storage_state_uninitialised, + storage_state_initialised, + storage_state_loaded +}; + /**************************************************************************** * DefaultHandler * @@ -119,6 +126,10 @@ struct DefaultHandler
/* connection cookie for the advise on the delegate OLE object */ DWORD dwAdvConn; + + /* storage passed to Load or InitNew */ + IStorage *storage; + enum storage_state storage_state; };
typedef struct DefaultHandler DefaultHandler; @@ -1302,7 +1313,12 @@ static HRESULT WINAPI DefaultHandler_Run( IOleObject_QueryInterface(This->pOleDelegate, &IID_IPersistStorage, (void **)&This->pPSDelegate); if (This->pPSDelegate) - hr = IPersistStorage_InitNew(This->pPSDelegate, NULL); + { + if(This->storage_state == storage_state_initialised) + hr = IPersistStorage_InitNew(This->pPSDelegate, This->storage); + else if(This->storage_state == storage_state_loaded) + hr = IPersistStorage_Load(This->pPSDelegate, This->storage); + } }
if (SUCCEEDED(hr) && This->containerApp) @@ -1548,6 +1564,13 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_InitNew( if(SUCCEEDED(hr) && object_is_running(This)) hr = IPersistStorage_InitNew(This->pPSDelegate, pStg);
+ if(SUCCEEDED(hr)) + { + IStorage_AddRef(pStg); + This->storage = pStg; + This->storage_state = storage_state_initialised; + } + return hr; }
@@ -1570,6 +1593,12 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_Load( if(SUCCEEDED(hr) && object_is_running(This)) hr = IPersistStorage_Load(This->pPSDelegate, pStg);
+ if(SUCCEEDED(hr)) + { + IStorage_AddRef(pStg); + This->storage = pStg; + This->storage_state = storage_state_loaded; + } return hr; }
@@ -1614,6 +1643,14 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_SaveCompleted( if(SUCCEEDED(hr) && object_is_running(This)) hr = IPersistStorage_SaveCompleted(This->pPSDelegate, pStgNew);
+ if(pStgNew) + { + IStorage_AddRef(pStgNew); + if(This->storage) IStorage_Release(This->storage); + This->storage = pStgNew; + This->storage_state = storage_state_loaded; + } + return hr; }
@@ -1635,6 +1672,10 @@ static HRESULT WINAPI DefaultHandler_IPersistStorage_HandsOffStorage( if(SUCCEEDED(hr) && object_is_running(This)) hr = IPersistStorage_HandsOffStorage(This->pPSDelegate);
+ if(This->storage) IStorage_Release(This->storage); + This->storage = NULL; + This->storage_state = storage_state_uninitialised; + return hr; }
@@ -1795,6 +1836,8 @@ static DefaultHandler* DefaultHandler_Construct( This->pDataDelegate = NULL;
This->dwAdvConn = 0; + This->storage = NULL; + This->storage_state = storage_state_uninitialised;
return This; } @@ -1836,6 +1879,12 @@ static void DefaultHandler_Destroy( This->dataAdviseHolder = NULL; }
+ if (This->storage) + { + IStorage_Release(This->storage); + This->storage = NULL; + } + HeapFree(GetProcessHeap(), 0, This); }