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
56793126
Commit
56793126
authored
Jul 02, 2020
by
Jacek Caban
Committed by
Alexandre Julliard
Jul 02, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Add IMarkupServices::CreateMarkupPointer implementation.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
ffbee79c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
321 additions
and
2 deletions
+321
-2
htmldoc.c
dlls/mshtml/htmldoc.c
+4
-2
mshtml_private.h
dlls/mshtml/mshtml_private.h
+1
-0
range.c
dlls/mshtml/range.c
+294
-0
dom.c
dlls/mshtml/tests/dom.c
+22
-0
No files found.
dlls/mshtml/htmldoc.c
View file @
56793126
...
...
@@ -4840,8 +4840,10 @@ static ULONG WINAPI MarkupServices_Release(IMarkupServices *iface)
static
HRESULT
WINAPI
MarkupServices_CreateMarkupPointer
(
IMarkupServices
*
iface
,
IMarkupPointer
**
ppPointer
)
{
HTMLDocument
*
This
=
impl_from_IMarkupServices
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
ppPointer
);
return
E_NOTIMPL
;
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
ppPointer
);
return
create_markup_pointer
(
ppPointer
);
}
static
HRESULT
WINAPI
MarkupServices_CreateMarkupContainer
(
IMarkupServices
*
iface
,
IMarkupContainer
**
ppMarkupContainer
)
...
...
dlls/mshtml/mshtml_private.h
View file @
56793126
...
...
@@ -1018,6 +1018,7 @@ HRESULT HTMLTxtRange_Create(HTMLDocumentNode*,nsIDOMRange*,IHTMLTxtRange**) DECL
IHTMLStyleSheet
*
HTMLStyleSheet_Create
(
nsIDOMStyleSheet
*
)
DECLSPEC_HIDDEN
;
IHTMLStyleSheetsCollection
*
HTMLStyleSheetsCollection_Create
(
nsIDOMStyleSheetList
*
)
DECLSPEC_HIDDEN
;
HRESULT
HTMLDOMRange_Create
(
nsIDOMRange
*
,
IHTMLDOMRange
**
)
DECLSPEC_HIDDEN
;
HRESULT
create_markup_pointer
(
IMarkupPointer
**
)
DECLSPEC_HIDDEN
;
void
detach_document_node
(
HTMLDocumentNode
*
)
DECLSPEC_HIDDEN
;
void
detach_selection
(
HTMLDocumentNode
*
)
DECLSPEC_HIDDEN
;
...
...
dlls/mshtml/range.c
View file @
56793126
...
...
@@ -2116,3 +2116,297 @@ void detach_ranges(HTMLDocumentNode *This)
list_remove
(
&
iter
->
entry
);
}
}
typedef
struct
{
IMarkupPointer2
IMarkupPointer2_iface
;
LONG
ref
;
}
MarkupPointer
;
static
inline
MarkupPointer
*
impl_from_IMarkupPointer2
(
IMarkupPointer2
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
MarkupPointer
,
IMarkupPointer2_iface
);
}
static
HRESULT
WINAPI
MarkupPointer2_QueryInterface
(
IMarkupPointer2
*
iface
,
REFIID
riid
,
void
**
ppv
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
TRACE
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_mshtml_guid
(
riid
),
ppv
);
if
(
IsEqualGUID
(
&
IID_IUnknown
,
riid
))
{
*
ppv
=
&
This
->
IMarkupPointer2_iface
;
}
else
if
(
IsEqualGUID
(
&
IID_IMarkupPointer
,
riid
))
{
*
ppv
=
&
This
->
IMarkupPointer2_iface
;
}
else
if
(
IsEqualGUID
(
&
IID_IMarkupPointer2
,
riid
))
{
*
ppv
=
&
This
->
IMarkupPointer2_iface
;
}
else
{
*
ppv
=
NULL
;
WARN
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
ppv
);
return
E_NOINTERFACE
;
}
IUnknown_AddRef
((
IUnknown
*
)
*
ppv
);
return
S_OK
;
}
static
ULONG
WINAPI
MarkupPointer2_AddRef
(
IMarkupPointer2
*
iface
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
LONG
ref
=
InterlockedIncrement
(
&
This
->
ref
);
TRACE
(
"(%p) ref=%d
\n
"
,
This
,
ref
);
return
ref
;
}
static
ULONG
WINAPI
MarkupPointer2_Release
(
IMarkupPointer2
*
iface
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
LONG
ref
=
InterlockedDecrement
(
&
This
->
ref
);
TRACE
(
"(%p) ref=%d
\n
"
,
This
,
ref
);
if
(
!
ref
)
heap_free
(
This
);
return
ref
;
}
static
HRESULT
WINAPI
MarkupPointer2_OwningDoc
(
IMarkupPointer2
*
iface
,
IHTMLDocument2
**
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_Gravity
(
IMarkupPointer2
*
iface
,
POINTER_GRAVITY
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_SetGravity
(
IMarkupPointer2
*
iface
,
POINTER_GRAVITY
gravity
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%u)
\n
"
,
This
,
gravity
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_Cling
(
IMarkupPointer2
*
iface
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_SetCling
(
IMarkupPointer2
*
iface
,
BOOL
cling
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%x)
\n
"
,
This
,
cling
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_Unposition
(
IMarkupPointer2
*
iface
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)
\n
"
,
This
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsPositioned
(
IMarkupPointer2
*
iface
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_GetContainer
(
IMarkupPointer2
*
iface
,
IMarkupContainer
**
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveAdjacentToElement
(
IMarkupPointer2
*
iface
,
IHTMLElement
*
element
,
ELEMENT_ADJACENCY
adj
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %u)
\n
"
,
This
,
element
,
adj
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveToPointer
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
pointer
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
pointer
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveToContainer
(
IMarkupPointer2
*
iface
,
IMarkupContainer
*
container
,
BOOL
at_start
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %x)
\n
"
,
This
,
container
,
at_start
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_Left
(
IMarkupPointer2
*
iface
,
BOOL
move
,
MARKUP_CONTEXT_TYPE
*
context
,
IHTMLElement
**
element
,
LONG
*
len
,
OLECHAR
*
text
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%x %p %p %p %p)
\n
"
,
This
,
move
,
context
,
element
,
len
,
text
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_Right
(
IMarkupPointer2
*
iface
,
BOOL
move
,
MARKUP_CONTEXT_TYPE
*
context
,
IHTMLElement
**
element
,
LONG
*
len
,
OLECHAR
*
text
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%x %p %p %p %p)
\n
"
,
This
,
move
,
context
,
element
,
len
,
text
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_CurrentScope
(
IMarkupPointer2
*
iface
,
IHTMLElement
**
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsLeftOf
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
that_pointer
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %p)
\n
"
,
This
,
that_pointer
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsLeftOfOrEqualTo
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
that_pointer
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %p)
\n
"
,
This
,
that_pointer
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsRightOf
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
that_pointer
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %p)
\n
"
,
This
,
that_pointer
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsRightOfOrEqualTo
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
that_pointer
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %p)
\n
"
,
This
,
that_pointer
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsEqualTo
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
that_pointer
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %p)
\n
"
,
This
,
that_pointer
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveUnit
(
IMarkupPointer2
*
iface
,
MOVEUNIT_ACTION
action
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%u)
\n
"
,
This
,
action
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_FindText
(
IMarkupPointer2
*
iface
,
OLECHAR
*
text
,
DWORD
flags
,
IMarkupPointer
*
end_match
,
IMarkupPointer
*
end_search
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%s %x %p %p)
\n
"
,
This
,
debugstr_w
(
text
),
flags
,
end_match
,
end_search
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsAtWordBreak
(
IMarkupPointer2
*
iface
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_GetMarkupPosition
(
IMarkupPointer2
*
iface
,
LONG
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p)
\n
"
,
This
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveToMarkupPosition
(
IMarkupPointer2
*
iface
,
IMarkupContainer
*
container
,
LONG
mp
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %d)
\n
"
,
This
,
container
,
mp
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveUnitBounded
(
IMarkupPointer2
*
iface
,
MOVEUNIT_ACTION
action
,
IMarkupPointer
*
boundry
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%u %p)
\n
"
,
This
,
action
,
boundry
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_IsInsideURL
(
IMarkupPointer2
*
iface
,
IMarkupPointer
*
right
,
BOOL
*
p
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %p)
\n
"
,
This
,
right
,
p
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
MarkupPointer2_MoveToContent
(
IMarkupPointer2
*
iface
,
IHTMLElement
*
element
,
BOOL
at_start
)
{
MarkupPointer
*
This
=
impl_from_IMarkupPointer2
(
iface
);
FIXME
(
"(%p)->(%p %x)
\n
"
,
This
,
element
,
at_start
);
return
E_NOTIMPL
;
}
static
const
IMarkupPointer2Vtbl
MarkupPointer2Vtbl
=
{
MarkupPointer2_QueryInterface
,
MarkupPointer2_AddRef
,
MarkupPointer2_Release
,
MarkupPointer2_OwningDoc
,
MarkupPointer2_Gravity
,
MarkupPointer2_SetGravity
,
MarkupPointer2_Cling
,
MarkupPointer2_SetCling
,
MarkupPointer2_Unposition
,
MarkupPointer2_IsPositioned
,
MarkupPointer2_GetContainer
,
MarkupPointer2_MoveAdjacentToElement
,
MarkupPointer2_MoveToPointer
,
MarkupPointer2_MoveToContainer
,
MarkupPointer2_Left
,
MarkupPointer2_Right
,
MarkupPointer2_CurrentScope
,
MarkupPointer2_IsLeftOf
,
MarkupPointer2_IsLeftOfOrEqualTo
,
MarkupPointer2_IsRightOf
,
MarkupPointer2_IsRightOfOrEqualTo
,
MarkupPointer2_IsEqualTo
,
MarkupPointer2_MoveUnit
,
MarkupPointer2_FindText
,
MarkupPointer2_IsAtWordBreak
,
MarkupPointer2_GetMarkupPosition
,
MarkupPointer2_MoveToMarkupPosition
,
MarkupPointer2_MoveUnitBounded
,
MarkupPointer2_IsInsideURL
,
MarkupPointer2_MoveToContent
};
HRESULT
create_markup_pointer
(
IMarkupPointer
**
ret
)
{
MarkupPointer
*
markup_pointer
;
if
(
!
(
markup_pointer
=
heap_alloc
(
sizeof
(
*
markup_pointer
))))
return
E_OUTOFMEMORY
;
markup_pointer
->
IMarkupPointer2_iface
.
lpVtbl
=
&
MarkupPointer2Vtbl
;
markup_pointer
->
ref
=
1
;
*
ret
=
(
IMarkupPointer
*
)
&
markup_pointer
->
IMarkupPointer2_iface
;
return
S_OK
;
}
dlls/mshtml/tests/dom.c
View file @
56793126
...
...
@@ -5882,6 +5882,27 @@ static void test_txtrange(IHTMLDocument2 *doc)
IHTMLTxtRange_Release
(
range
);
}
static
void
test_markup_services
(
IHTMLDocument2
*
doc
)
{
IMarkupServices
*
markup_services
;
IMarkupPointer
*
markup_pointer
;
IMarkupPointer2
*
markup_pointer2
;
HRESULT
hres
;
hres
=
IHTMLDocument2_QueryInterface
(
doc
,
&
IID_IMarkupServices
,
(
void
**
)
&
markup_services
);
ok
(
hres
==
S_OK
,
"Could not get IMarkupServices iface: %08x
\n
"
,
hres
);
hres
=
IMarkupServices_CreateMarkupPointer
(
markup_services
,
&
markup_pointer
);
ok
(
hres
==
S_OK
,
"CreateMarkupPointer failed: %08x
\n
"
,
hres
);
hres
=
IMarkupPointer_QueryInterface
(
markup_pointer
,
&
IID_IMarkupPointer2
,
(
void
**
)
&
markup_pointer2
);
ok
(
hres
==
S_OK
,
"Could not get IMarkupPointer2 iface: %08x
\n
"
,
hres
);
IMarkupPointer_Release
(
markup_pointer
);
IMarkupPointer2_Release
(
markup_pointer2
);
IMarkupServices_Release
(
markup_services
);
}
static
void
test_range
(
IHTMLDocument2
*
doc
)
{
if
(
is_ie9plus
)
{
...
...
@@ -5905,6 +5926,7 @@ static void test_range(IHTMLDocument2 *doc)
}
test_txtrange
(
doc
);
test_markup_services
(
doc
);
}
#define test_compatmode(a,b) _test_compatmode(__LINE__,a,b)
...
...
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