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
2a080e85
Commit
2a080e85
authored
Oct 23, 2010
by
Nikolay Sivov
Committed by
Alexandre Julliard
Oct 25, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msxml3: Add stub IConnectionPoint, return points for supported IIDs.
parent
0f2c9960
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
168 additions
and
5 deletions
+168
-5
domdoc.c
dlls/msxml3/domdoc.c
+156
-5
domdoc.c
dlls/msxml3/tests/domdoc.c
+12
-0
No files found.
dlls/msxml3/domdoc.c
View file @
2a080e85
...
...
@@ -31,6 +31,7 @@
#include "winuser.h"
#include "winnls.h"
#include "ole2.h"
#include "olectl.h"
#include "msxml6.h"
#include "wininet.h"
#include "winreg.h"
...
...
@@ -79,7 +80,20 @@ typedef struct _domdoc_properties {
BOOL
XPath
;
}
domdoc_properties
;
typedef
struct
_domdoc
typedef
struct
ConnectionPoint
ConnectionPoint
;
typedef
struct
domdoc
domdoc
;
struct
ConnectionPoint
{
const
IConnectionPointVtbl
*
lpVtblConnectionPoint
;
const
IID
*
iid
;
ConnectionPoint
*
next
;
IConnectionPointContainer
*
container
;
domdoc
*
doc
;
};
struct
domdoc
{
xmlnode
node
;
const
struct
IXMLDOMDocument3Vtbl
*
lpVtbl
;
...
...
@@ -106,7 +120,18 @@ typedef struct _domdoc
/* IObjectSafety */
DWORD
safeopt
;
}
domdoc
;
/* connection list */
ConnectionPoint
*
cp_list
;
ConnectionPoint
cp_domdocevents
;
ConnectionPoint
cp_propnotif
;
ConnectionPoint
cp_dispatch
;
};
static
inline
ConnectionPoint
*
impl_from_IConnectionPoint
(
IConnectionPoint
*
iface
)
{
return
(
ConnectionPoint
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
ConnectionPoint
,
lpVtblConnectionPoint
));
}
/*
In native windows, the whole lifetime management of XMLDOMNodes is
...
...
@@ -2797,11 +2822,30 @@ static HRESULT WINAPI ConnectionPointContainer_EnumConnectionPoints(IConnectionP
}
static
HRESULT
WINAPI
ConnectionPointContainer_FindConnectionPoint
(
IConnectionPointContainer
*
iface
,
REFIID
riid
,
IConnectionPoint
**
ppCP
)
REFIID
riid
,
IConnectionPoint
**
cp
)
{
domdoc
*
This
=
impl_from_IConnectionPointContainer
(
iface
);
FIXME
(
"(%p)->(%s %p): stub
\n
"
,
This
,
debugstr_guid
(
riid
),
ppCP
);
return
E_NOTIMPL
;
ConnectionPoint
*
iter
;
TRACE
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
cp
);
*
cp
=
NULL
;
for
(
iter
=
This
->
cp_list
;
iter
;
iter
=
iter
->
next
)
{
if
(
IsEqualGUID
(
iter
->
iid
,
riid
))
*
cp
=
(
IConnectionPoint
*
)
&
iter
->
lpVtblConnectionPoint
;
}
if
(
*
cp
)
{
IConnectionPoint_AddRef
(
*
cp
);
return
S_OK
;
}
FIXME
(
"unsupported riid %s
\n
"
,
debugstr_guid
(
riid
));
return
CONNECT_E_NOCONNECTION
;
}
static
const
struct
IConnectionPointContainerVtbl
ConnectionPointContainerVtbl
=
...
...
@@ -2813,6 +2857,107 @@ static const struct IConnectionPointContainerVtbl ConnectionPointContainerVtbl =
ConnectionPointContainer_FindConnectionPoint
};
/* IConnectionPoint */
static
HRESULT
WINAPI
ConnectionPoint_QueryInterface
(
IConnectionPoint
*
iface
,
REFIID
riid
,
void
**
ppv
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
TRACE
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
ppv
);
*
ppv
=
NULL
;
if
(
IsEqualGUID
(
&
IID_IUnknown
,
riid
)
||
IsEqualGUID
(
&
IID_IConnectionPoint
,
riid
))
{
*
ppv
=
iface
;
}
if
(
*
ppv
)
{
IConnectionPoint_AddRef
(
iface
);
return
S_OK
;
}
WARN
(
"Unsupported interface %s
\n
"
,
debugstr_guid
(
riid
));
return
E_NOINTERFACE
;
}
static
ULONG
WINAPI
ConnectionPoint_AddRef
(
IConnectionPoint
*
iface
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
return
IConnectionPointContainer_AddRef
(
This
->
container
);
}
static
ULONG
WINAPI
ConnectionPoint_Release
(
IConnectionPoint
*
iface
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
return
IConnectionPointContainer_Release
(
This
->
container
);
}
static
HRESULT
WINAPI
ConnectionPoint_GetConnectionInterface
(
IConnectionPoint
*
iface
,
IID
*
pIID
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
pIID
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
ConnectionPoint_GetConnectionPointContainer
(
IConnectionPoint
*
iface
,
IConnectionPointContainer
**
ppCPC
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
ppCPC
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
ConnectionPoint_Advise
(
IConnectionPoint
*
iface
,
IUnknown
*
pUnkSink
,
DWORD
*
pdwCookie
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
FIXME
(
"(%p)->(%p %p): stub
\n
"
,
This
,
pUnkSink
,
pdwCookie
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
ConnectionPoint_Unadvise
(
IConnectionPoint
*
iface
,
DWORD
dwCookie
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
FIXME
(
"(%p)->(%d): stub
\n
"
,
This
,
dwCookie
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
ConnectionPoint_EnumConnections
(
IConnectionPoint
*
iface
,
IEnumConnections
**
ppEnum
)
{
ConnectionPoint
*
This
=
impl_from_IConnectionPoint
(
iface
);
FIXME
(
"(%p)->(%p): stub
\n
"
,
This
,
ppEnum
);
return
E_NOTIMPL
;
}
static
const
IConnectionPointVtbl
ConnectionPointVtbl
=
{
ConnectionPoint_QueryInterface
,
ConnectionPoint_AddRef
,
ConnectionPoint_Release
,
ConnectionPoint_GetConnectionInterface
,
ConnectionPoint_GetConnectionPointContainer
,
ConnectionPoint_Advise
,
ConnectionPoint_Unadvise
,
ConnectionPoint_EnumConnections
};
void
ConnectionPoint_Init
(
ConnectionPoint
*
cp
,
struct
domdoc
*
doc
,
REFIID
riid
)
{
cp
->
lpVtblConnectionPoint
=
&
ConnectionPointVtbl
;
cp
->
doc
=
doc
;
cp
->
iid
=
riid
;
cp
->
next
=
NULL
;
cp
->
next
=
doc
->
cp_list
;
doc
->
cp_list
=
cp
;
cp
->
container
=
(
IConnectionPointContainer
*
)
&
doc
->
lpVtblConnectionPointContainer
;
}
/* xmldoc implementation of IObjectWithSite */
static
HRESULT
WINAPI
xmldoc_ObjectWithSite_QueryInterface
(
IObjectWithSite
*
iface
,
REFIID
riid
,
void
**
ppvObject
)
...
...
@@ -2982,6 +3127,12 @@ HRESULT DOMDocument_create_from_xmldoc(xmlDocPtr xmldoc, IXMLDOMDocument3 **docu
doc
->
site
=
NULL
;
doc
->
safeopt
=
0
;
doc
->
bsc
=
NULL
;
doc
->
cp_list
=
NULL
;
/* events connection points */
ConnectionPoint_Init
(
&
doc
->
cp_dispatch
,
doc
,
&
IID_IDispatch
);
ConnectionPoint_Init
(
&
doc
->
cp_propnotif
,
doc
,
&
IID_IPropertyNotifySink
);
ConnectionPoint_Init
(
&
doc
->
cp_domdocevents
,
doc
,
&
DIID_XMLDOMDocumentEvents
);
init_xmlnode
(
&
doc
->
node
,
(
xmlNodePtr
)
xmldoc
,
(
IXMLDOMNode
*
)
&
doc
->
lpVtbl
,
&
domdoc_dispex
);
...
...
dlls/msxml3/tests/domdoc.c
View file @
2a080e85
...
...
@@ -7100,6 +7100,7 @@ static void test_selectSingleNode(void)
static
void
test_events
(
void
)
{
IConnectionPointContainer
*
conn
;
IConnectionPoint
*
point
;
IXMLDOMDocument
*
doc
;
HRESULT
hr
;
...
...
@@ -7108,6 +7109,17 @@ static void test_events(void)
hr
=
IXMLDOMDocument_QueryInterface
(
doc
,
&
IID_IConnectionPointContainer
,
(
void
**
)
&
conn
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
hr
=
IConnectionPointContainer_FindConnectionPoint
(
conn
,
&
IID_IDispatch
,
&
point
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
IConnectionPoint_Release
(
point
);
hr
=
IConnectionPointContainer_FindConnectionPoint
(
conn
,
&
IID_IPropertyNotifySink
,
&
point
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
IConnectionPoint_Release
(
point
);
hr
=
IConnectionPointContainer_FindConnectionPoint
(
conn
,
&
DIID_XMLDOMDocumentEvents
,
&
point
);
ok
(
hr
==
S_OK
,
"got 0x%08x
\n
"
,
hr
);
IConnectionPoint_Release
(
point
);
IConnectionPointContainer_Release
(
conn
);
IXMLDOMDocument_Release
(
doc
);
...
...
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