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
d5b0c1d7
Commit
d5b0c1d7
authored
Oct 20, 2017
by
Jacek Caban
Committed by
Alexandre Julliard
Oct 20, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Implement IDOMEvent::preventDefault and use it where appropriate.
Signed-off-by:
Jacek Caban
<
jacek@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
3a4fed1d
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
19 additions
and
18 deletions
+19
-18
htmlevent.c
dlls/mshtml/htmlevent.c
+15
-18
htmlevent.h
dlls/mshtml/htmlevent.h
+1
-0
events.c
dlls/mshtml/tests/events.c
+3
-0
No files found.
dlls/mshtml/htmlevent.c
View file @
d5b0c1d7
...
@@ -232,7 +232,6 @@ struct HTMLEventObj {
...
@@ -232,7 +232,6 @@ struct HTMLEventObj {
const
event_info_t
*
type
;
const
event_info_t
*
type
;
DOMEvent
*
event
;
DOMEvent
*
event
;
VARIANT
return_value
;
VARIANT
return_value
;
BOOL
prevent_default
;
BOOL
cancel_bubble
;
BOOL
cancel_bubble
;
};
};
...
@@ -435,8 +434,8 @@ static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT
...
@@ -435,8 +434,8 @@ static HRESULT WINAPI HTMLEventObj_put_returnValue(IHTMLEventObj *iface, VARIANT
}
}
This
->
return_value
=
v
;
This
->
return_value
=
v
;
if
(
!
V_BOOL
(
&
v
))
if
(
!
V_BOOL
(
&
v
)
&&
This
->
event
)
This
->
prevent_default
=
TRUE
;
IDOMEvent_preventDefault
(
&
This
->
event
->
IDOMEvent_iface
)
;
return
S_OK
;
return
S_OK
;
}
}
...
@@ -974,8 +973,12 @@ static HRESULT WINAPI DOMEvent_initEvent(IDOMEvent *iface, BSTR type, VARIANT_BO
...
@@ -974,8 +973,12 @@ static HRESULT WINAPI DOMEvent_initEvent(IDOMEvent *iface, BSTR type, VARIANT_BO
static
HRESULT
WINAPI
DOMEvent_preventDefault
(
IDOMEvent
*
iface
)
static
HRESULT
WINAPI
DOMEvent_preventDefault
(
IDOMEvent
*
iface
)
{
{
DOMEvent
*
This
=
impl_from_IDOMEvent
(
iface
);
DOMEvent
*
This
=
impl_from_IDOMEvent
(
iface
);
FIXME
(
"(%p)
\n
"
,
This
);
return
E_NOTIMPL
;
TRACE
(
"(%p)
\n
"
,
This
);
This
->
prevent_default
=
TRUE
;
nsIDOMEvent_PreventDefault
(
This
->
nsevent
);
return
S_OK
;
}
}
static
HRESULT
WINAPI
DOMEvent_stopPropagation
(
IDOMEvent
*
iface
)
static
HRESULT
WINAPI
DOMEvent_stopPropagation
(
IDOMEvent
*
iface
)
...
@@ -1274,7 +1277,7 @@ void call_event_handlers(HTMLEventObj *event_obj, EventTarget *event_target, DOM
...
@@ -1274,7 +1277,7 @@ void call_event_handlers(HTMLEventObj *event_obj, EventTarget *event_target, DOM
if
(
cancelable
)
{
if
(
cancelable
)
{
if
(
V_VT
(
&
v
)
==
VT_BOOL
)
{
if
(
V_VT
(
&
v
)
==
VT_BOOL
)
{
if
(
!
V_BOOL
(
&
v
))
if
(
!
V_BOOL
(
&
v
))
event_obj
->
prevent_default
=
TRUE
;
IDOMEvent_preventDefault
(
&
event
->
IDOMEvent_iface
)
;
}
else
if
(
V_VT
(
&
v
)
!=
VT_EMPTY
)
{
}
else
if
(
V_VT
(
&
v
)
!=
VT_EMPTY
)
{
FIXME
(
"unhandled result %s
\n
"
,
debugstr_variant
(
&
v
));
FIXME
(
"unhandled result %s
\n
"
,
debugstr_variant
(
&
v
));
}
}
...
@@ -1306,7 +1309,7 @@ void call_event_handlers(HTMLEventObj *event_obj, EventTarget *event_target, DOM
...
@@ -1306,7 +1309,7 @@ void call_event_handlers(HTMLEventObj *event_obj, EventTarget *event_target, DOM
if
(
cancelable
)
{
if
(
cancelable
)
{
if
(
V_VT
(
&
v
)
==
VT_BOOL
)
{
if
(
V_VT
(
&
v
)
==
VT_BOOL
)
{
if
(
!
V_BOOL
(
&
v
))
if
(
!
V_BOOL
(
&
v
))
event_obj
->
prevent_default
=
TRUE
;
IDOMEvent_preventDefault
(
&
event
->
IDOMEvent_iface
)
;
}
else
if
(
V_VT
(
&
v
)
!=
VT_EMPTY
)
{
}
else
if
(
V_VT
(
&
v
)
!=
VT_EMPTY
)
{
FIXME
(
"unhandled result %s
\n
"
,
debugstr_variant
(
&
v
));
FIXME
(
"unhandled result %s
\n
"
,
debugstr_variant
(
&
v
));
}
}
...
@@ -1346,7 +1349,7 @@ void call_event_handlers(HTMLEventObj *event_obj, EventTarget *event_target, DOM
...
@@ -1346,7 +1349,7 @@ void call_event_handlers(HTMLEventObj *event_obj, EventTarget *event_target, DOM
if
(
cancelable
)
{
if
(
cancelable
)
{
if
(
V_VT
(
&
v
)
==
VT_BOOL
)
{
if
(
V_VT
(
&
v
)
==
VT_BOOL
)
{
if
(
!
V_BOOL
(
&
v
))
if
(
!
V_BOOL
(
&
v
))
event_obj
->
prevent_default
=
TRUE
;
IDOMEvent_preventDefault
(
&
event
->
IDOMEvent_iface
)
;
}
else
if
(
V_VT
(
&
v
)
!=
VT_EMPTY
)
{
}
else
if
(
V_VT
(
&
v
)
!=
VT_EMPTY
)
{
FIXME
(
"unhandled result %s
\n
"
,
debugstr_variant
(
&
v
));
FIXME
(
"unhandled result %s
\n
"
,
debugstr_variant
(
&
v
));
}
}
...
@@ -1368,7 +1371,6 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
...
@@ -1368,7 +1371,6 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
unsigned
chain_cnt
,
chain_buf_size
,
i
;
unsigned
chain_cnt
,
chain_buf_size
,
i
;
const
event_target_vtbl_t
*
vtbl
,
*
target_vtbl
;
const
event_target_vtbl_t
*
vtbl
,
*
target_vtbl
;
IHTMLEventObj
*
prev_event
=
NULL
;
IHTMLEventObj
*
prev_event
=
NULL
;
BOOL
prevent_default
=
FALSE
;
EventTarget
*
iter
;
EventTarget
*
iter
;
DWORD
event_flags
;
DWORD
event_flags
;
HRESULT
hres
;
HRESULT
hres
;
...
@@ -1430,11 +1432,9 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
...
@@ -1430,11 +1432,9 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
IHTMLEventObj_Release
(
prev_event
);
IHTMLEventObj_Release
(
prev_event
);
}
}
if
(
event_obj
&&
event_obj
->
prevent_default
)
prevent_default
=
TRUE
;
if
(
event_flags
&
EVENT_HASDEFAULTHANDLERS
)
{
if
(
event_flags
&
EVENT_HASDEFAULTHANDLERS
)
{
for
(
i
=
0
;
!
prevent_default
&&
i
<
chain_cnt
;
i
++
)
{
for
(
i
=
0
;
!
event
->
prevent_default
&&
i
<
chain_cnt
;
i
++
)
{
BOOL
prevent_default
=
FALSE
;
vtbl
=
dispex_get_vtbl
(
&
target_chain
[
i
]
->
dispex
);
vtbl
=
dispex_get_vtbl
(
&
target_chain
[
i
]
->
dispex
);
if
(
!
vtbl
||
!
vtbl
->
handle_event_default
)
if
(
!
vtbl
||
!
vtbl
->
handle_event_default
)
continue
;
continue
;
...
@@ -1442,6 +1442,8 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
...
@@ -1442,6 +1442,8 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
event
->
nsevent
,
&
prevent_default
);
event
->
nsevent
,
&
prevent_default
);
if
(
FAILED
(
hres
)
||
(
event_obj
&&
event_obj
->
cancel_bubble
))
if
(
FAILED
(
hres
)
||
(
event_obj
&&
event_obj
->
cancel_bubble
))
break
;
break
;
if
(
prevent_default
)
IDOMEvent_preventDefault
(
&
event
->
IDOMEvent_iface
);
}
}
}
}
...
@@ -1449,11 +1451,6 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
...
@@ -1449,11 +1451,6 @@ static void fire_event_obj(EventTarget *event_target, DOMEvent *event, HTMLEvent
IDispatchEx_Release
(
&
target_chain
[
i
]
->
dispex
.
IDispatchEx_iface
);
IDispatchEx_Release
(
&
target_chain
[
i
]
->
dispex
.
IDispatchEx_iface
);
if
(
target_chain
!=
target_chain_buf
)
if
(
target_chain
!=
target_chain_buf
)
heap_free
(
target_chain
);
heap_free
(
target_chain
);
if
(
prevent_default
)
{
TRACE
(
"calling PreventDefault
\n
"
);
nsIDOMEvent_PreventDefault
(
event
->
nsevent
);
}
}
}
void
fire_event
(
HTMLDocumentNode
*
doc
,
eventid_t
eid
,
BOOL
set_event
,
EventTarget
*
target
,
nsIDOMEvent
*
nsevent
)
void
fire_event
(
HTMLDocumentNode
*
doc
,
eventid_t
eid
,
BOOL
set_event
,
EventTarget
*
target
,
nsIDOMEvent
*
nsevent
)
...
...
dlls/mshtml/htmlevent.h
View file @
d5b0c1d7
...
@@ -64,6 +64,7 @@ typedef struct {
...
@@ -64,6 +64,7 @@ typedef struct {
nsIDOMEvent
*
nsevent
;
nsIDOMEvent
*
nsevent
;
eventid_t
event_id
;
eventid_t
event_id
;
EventTarget
*
target
;
EventTarget
*
target
;
BOOL
prevent_default
;
}
DOMEvent
;
}
DOMEvent
;
eventid_t
str_to_eid
(
LPCWSTR
)
DECLSPEC_HIDDEN
;
eventid_t
str_to_eid
(
LPCWSTR
)
DECLSPEC_HIDDEN
;
...
...
dlls/mshtml/tests/events.c
View file @
d5b0c1d7
...
@@ -2547,6 +2547,9 @@ static void test_create_event(IHTMLDocument2 *doc)
...
@@ -2547,6 +2547,9 @@ static void test_create_event(IHTMLDocument2 *doc)
SysFreeString
(
str
);
SysFreeString
(
str
);
ok
(
hres
==
S_OK
,
"createEvent failed: %08x
\n
"
,
hres
);
ok
(
hres
==
S_OK
,
"createEvent failed: %08x
\n
"
,
hres
);
hres
=
IDOMEvent_preventDefault
(
event
);
ok
(
hres
==
S_OK
,
"preventDefault failed: %08x
\n
"
,
hres
);
IDOMEvent_Release
(
event
);
IDOMEvent_Release
(
event
);
IDocumentEvent_Release
(
doc_event
);
IDocumentEvent_Release
(
doc_event
);
...
...
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