diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 2353d95c0d8..c037709b603 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -1418,10 +1418,35 @@ static HRESULT WINAPI DOMMouseEvent_initMouseEvent(IDOMMouseEvent *iface, BSTR t
IEventTarget *related_target)
{
DOMEvent *This = impl_from_IDOMMouseEvent(iface);
- FIXME("(%p)->(%s %x %x %p %d %d %d %d %d %x %x %x %x %u %p)\n", This, debugstr_w(type),
+ nsAString type_str;
+ nsresult nsres;
+ HRESULT hres;
+
+ TRACE("(%p)->(%s %x %x %p %d %d %d %d %d %x %x %x %x %u %p)\n", This, debugstr_w(type),
can_bubble, cancelable, view, detail, screen_x, screen_y, client_x, client_y,
ctrl_key, alt_key, shift_key, meta_key, button, related_target);
- return E_NOTIMPL;
+
+ if(This->target) {
+ TRACE("called on already dispatched event\n");
+ return S_OK;
+ }
+
+ hres = IDOMEvent_initEvent(&This->IDOMEvent_iface, type, can_bubble, cancelable);
+ if(FAILED(hres))
+ return hres;
+
+ nsAString_InitDepend(&type_str, type);
+ nsres = nsIDOMMouseEvent_InitMouseEvent(This->mouse_event, &type_str, can_bubble, cancelable,
+ NULL /* FIXME */, detail, screen_x, screen_y,
+ client_x, client_y, ctrl_key, alt_key, shift_key,
+ meta_key, button, NULL /* FIXME */);
+ nsAString_Finish(&type_str);
+ if(NS_FAILED(nsres)) {
+ FIXME("InitMouseEvent failed: %08x\n", nsres);
+ return E_FAIL;
+ }
+
+ return S_OK;
}
static HRESULT WINAPI DOMMouseEvent_getModifierState(IDOMMouseEvent *iface, BSTR key,