Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
54f2f60b
Commit
54f2f60b
authored
Aug 08, 2007
by
Huw Davies
Committed by
Alexandre Julliard
Aug 09, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ole32: The default handler needs to have its own implementation of IPersistStorage.
For now we forward the methods to the data cache as before.
parent
e97c5be2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
170 additions
and
7 deletions
+170
-7
defaulthandler.c
dlls/ole32/defaulthandler.c
+170
-7
No files found.
dlls/ole32/defaulthandler.c
View file @
54f2f60b
...
...
@@ -75,6 +75,7 @@ struct DefaultHandler
const
IDataObjectVtbl
*
lpvtblIDataObject
;
const
IRunnableObjectVtbl
*
lpvtblIRunnableObject
;
const
IAdviseSinkVtbl
*
lpvtblIAdviseSink
;
const
IPersistStorageVtbl
*
lpvtblIPersistStorage
;
/* Reference count of this object */
LONG
ref
;
...
...
@@ -87,6 +88,8 @@ struct DefaultHandler
/* IUnknown implementation of the datacache. */
IUnknown
*
dataCache
;
/* IPersistStorage implementation of the datacache. */
IPersistStorage
*
dataCache_PersistStg
;
/* Client site for the embedded object. */
IOleClientSite
*
clientSite
;
...
...
@@ -151,6 +154,11 @@ static inline DefaultHandler *impl_from_IAdviseSink( IAdviseSink *iface )
return
(
DefaultHandler
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
DefaultHandler
,
lpvtblIAdviseSink
));
}
static
inline
DefaultHandler
*
impl_from_IPersistStorage
(
IPersistStorage
*
iface
)
{
return
(
DefaultHandler
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
DefaultHandler
,
lpvtblIPersistStorage
));
}
static
void
DefaultHandler_Destroy
(
DefaultHandler
*
This
);
static
inline
BOOL
object_is_running
(
DefaultHandler
*
This
)
...
...
@@ -193,8 +201,9 @@ static HRESULT WINAPI DefaultHandler_NDIUnknown_QueryInterface(
else
if
(
IsEqualIID
(
&
IID_IRunnableObject
,
riid
))
*
ppvObject
=
(
IRunnableObject
*
)
&
This
->
lpvtblIRunnableObject
;
else
if
(
IsEqualIID
(
&
IID_IPersist
,
riid
)
||
IsEqualIID
(
&
IID_IPersistStorage
,
riid
)
||
IsEqualIID
(
&
IID_IViewObject
,
riid
)
||
IsEqualIID
(
&
IID_IPersistStorage
,
riid
))
*
ppvObject
=
&
This
->
lpvtblIPersistStorage
;
else
if
(
IsEqualIID
(
&
IID_IViewObject
,
riid
)
||
IsEqualIID
(
&
IID_IViewObject2
,
riid
)
||
IsEqualIID
(
&
IID_IOleCache
,
riid
)
||
IsEqualIID
(
&
IID_IOleCache2
,
riid
))
...
...
@@ -1451,6 +1460,140 @@ static void WINAPI DefaultHandler_IAdviseSink_OnClose(
DefaultHandler_Stop
(
This
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_QueryInterface
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_QueryInterface
(
IPersistStorage
*
iface
,
REFIID
riid
,
void
**
ppvObject
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IUnknown_QueryInterface
(
This
->
outerUnknown
,
riid
,
ppvObject
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_AddRef
*
*/
static
ULONG
WINAPI
DefaultHandler_IPersistStorage_AddRef
(
IPersistStorage
*
iface
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IUnknown_AddRef
(
This
->
outerUnknown
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_Release
*
*/
static
ULONG
WINAPI
DefaultHandler_IPersistStorage_Release
(
IPersistStorage
*
iface
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IUnknown_Release
(
This
->
outerUnknown
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_GetClassID
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_GetClassID
(
IPersistStorage
*
iface
,
CLSID
*
clsid
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_GetClassID
(
This
->
dataCache_PersistStg
,
clsid
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_IsDirty
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_IsDirty
(
IPersistStorage
*
iface
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_IsDirty
(
This
->
dataCache_PersistStg
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_InitNew
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_InitNew
(
IPersistStorage
*
iface
,
IStorage
*
pStg
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_InitNew
(
This
->
dataCache_PersistStg
,
pStg
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_Load
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_Load
(
IPersistStorage
*
iface
,
IStorage
*
pStg
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_Load
(
This
->
dataCache_PersistStg
,
pStg
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_Save
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_Save
(
IPersistStorage
*
iface
,
IStorage
*
pStgSave
,
BOOL
fSaveAsLoad
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_Save
(
This
->
dataCache_PersistStg
,
pStgSave
,
fSaveAsLoad
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_SaveCompleted
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_SaveCompleted
(
IPersistStorage
*
iface
,
IStorage
*
pStgNew
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_SaveCompleted
(
This
->
dataCache_PersistStg
,
pStgNew
);
}
/************************************************************************
* DefaultHandler_IPersistStorage_HandsOffStorage
*
*/
static
HRESULT
WINAPI
DefaultHandler_IPersistStorage_HandsOffStorage
(
IPersistStorage
*
iface
)
{
DefaultHandler
*
This
=
impl_from_IPersistStorage
(
iface
);
return
IPersistStorage_HandsOffStorage
(
This
->
dataCache_PersistStg
);
}
/*
* Virtual function tables for the DefaultHandler class.
*/
...
...
@@ -1529,6 +1672,20 @@ static const IAdviseSinkVtbl DefaultHandler_IAdviseSink_VTable =
DefaultHandler_IAdviseSink_OnClose
};
static
const
IPersistStorageVtbl
DefaultHander_IPersistStorage_VTable
=
{
DefaultHandler_IPersistStorage_QueryInterface
,
DefaultHandler_IPersistStorage_AddRef
,
DefaultHandler_IPersistStorage_Release
,
DefaultHandler_IPersistStorage_GetClassID
,
DefaultHandler_IPersistStorage_IsDirty
,
DefaultHandler_IPersistStorage_InitNew
,
DefaultHandler_IPersistStorage_Load
,
DefaultHandler_IPersistStorage_Save
,
DefaultHandler_IPersistStorage_SaveCompleted
,
DefaultHandler_IPersistStorage_HandsOffStorage
};
/*********************************************************
* Methods implementation for the DefaultHandler class.
*/
...
...
@@ -1537,6 +1694,7 @@ static DefaultHandler* DefaultHandler_Construct(
LPUNKNOWN
pUnkOuter
)
{
DefaultHandler
*
This
=
NULL
;
HRESULT
hr
;
/*
* Allocate space for the object.
...
...
@@ -1574,11 +1732,14 @@ static DefaultHandler* DefaultHandler_Construct(
* We aggregate with the datacache. Make sure we pass our outer
* unknown as the datacache's outer unknown.
*/
CreateDataCache
(
This
->
outerUnknown
,
clsid
,
&
IID_IUnknown
,
(
void
**
)
&
This
->
dataCache
);
hr
=
CreateDataCache
(
This
->
outerUnknown
,
clsid
,
&
IID_IUnknown
,
(
void
**
)
&
This
->
dataCache
);
if
(
SUCCEEDED
(
hr
))
hr
=
IUnknown_QueryInterface
(
This
->
dataCache
,
&
IID_IPersistStorage
,
(
void
**
)
&
This
->
dataCache_PersistStg
);
if
(
FAILED
(
hr
))
ERR
(
"Unexpected error creating data cache
\n
"
);
/*
* Initialize the other data members of the class.
*/
...
...
@@ -1612,7 +1773,9 @@ static void DefaultHandler_Destroy(
/* Release our reference to the data cache. */
if
(
This
->
dataCache
)
{
IPersistStorage_Release
(
This
->
dataCache_PersistStg
);
IUnknown_Release
(
This
->
dataCache
);
This
->
dataCache_PersistStg
=
NULL
;
This
->
dataCache
=
NULL
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment