Jacek Caban : mshtml: Added IDOMKeyboardEvent stub implementation.

Alexandre Julliard julliard at winehq.org
Tue Feb 6 15:55:49 CST 2018


Module: wine
Branch: master
Commit: fff36a7896d92b129f526a226dab2208fd2aac8b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=fff36a7896d92b129f526a226dab2208fd2aac8b

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Feb  6 00:09:48 2018 +0100

mshtml: Added IDOMKeyboardEvent stub implementation.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlevent.c    | 187 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/mshtml/htmlevent.h    |   2 +
 dlls/mshtml/tests/events.c |  15 ++++
 3 files changed, 204 insertions(+)

diff --git a/dlls/mshtml/htmlevent.c b/dlls/mshtml/htmlevent.c
index 9ffce28..a574c26 100644
--- a/dlls/mshtml/htmlevent.c
+++ b/dlls/mshtml/htmlevent.c
@@ -855,6 +855,8 @@ static HRESULT WINAPI DOMEvent_QueryInterface(IDOMEvent *iface, REFIID riid, voi
         *ppv = &This->IDOMUIEvent_iface;
     else if(This->mouse_event && IsEqualGUID(&IID_IDOMMouseEvent, riid))
         *ppv = &This->IDOMMouseEvent_iface;
+    else if(This->keyboard_event && IsEqualGUID(&IID_IDOMKeyboardEvent, riid))
+        *ppv = &This->IDOMKeyboardEvent_iface;
     else if(dispex_query_interface(&This->dispex, riid, ppv))
         return *ppv ? S_OK : E_NOINTERFACE;
     else {
@@ -1636,6 +1638,186 @@ static const IDOMMouseEventVtbl DOMMouseEventVtbl = {
     DOMMouseEvent_get_which
 };
 
+static inline DOMEvent *impl_from_IDOMKeyboardEvent(IDOMKeyboardEvent *iface)
+{
+    return CONTAINING_RECORD(iface, DOMEvent, IDOMKeyboardEvent_iface);
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_QueryInterface(IDOMKeyboardEvent *iface, REFIID riid, void **ppv)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDOMEvent_QueryInterface(&This->IDOMEvent_iface, riid, ppv);
+}
+
+static ULONG WINAPI DOMKeyboardEvent_AddRef(IDOMKeyboardEvent *iface)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDOMEvent_AddRef(&This->IDOMEvent_iface);
+}
+
+static ULONG WINAPI DOMKeyboardEvent_Release(IDOMKeyboardEvent *iface)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDOMEvent_Release(&This->IDOMEvent_iface);
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_GetTypeInfoCount(IDOMKeyboardEvent *iface, UINT *pctinfo)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDispatchEx_GetTypeInfoCount(&This->dispex.IDispatchEx_iface, pctinfo);
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_GetTypeInfo(IDOMKeyboardEvent *iface, UINT iTInfo,
+                                                   LCID lcid, ITypeInfo **ppTInfo)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDispatchEx_GetTypeInfo(&This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_GetIDsOfNames(IDOMKeyboardEvent *iface, REFIID riid,
+        LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDispatchEx_GetIDsOfNames(&This->dispex.IDispatchEx_iface, riid, rgszNames, cNames,
+            lcid, rgDispId);
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_Invoke(IDOMKeyboardEvent *iface, DISPID dispIdMember,
+        REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
+        EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    return IDispatchEx_Invoke(&This->dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
+            wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_key(IDOMKeyboardEvent *iface, BSTR *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_location(IDOMKeyboardEvent *iface, ULONG *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_ctrlKey(IDOMKeyboardEvent *iface, VARIANT_BOOL *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_shiftKey(IDOMKeyboardEvent *iface, VARIANT_BOOL *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_altKey(IDOMKeyboardEvent *iface, VARIANT_BOOL *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_metaKey(IDOMKeyboardEvent *iface, VARIANT_BOOL *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_repeat(IDOMKeyboardEvent *iface, VARIANT_BOOL *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_getModifierState(IDOMKeyboardEvent *iface, BSTR key,
+        VARIANT_BOOL *state)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%s %p)\n", This, debugstr_w(key), state);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_initKeyboardEvent(IDOMKeyboardEvent *iface, BSTR type,
+        VARIANT_BOOL can_bubble, VARIANT_BOOL cancelable, IHTMLWindow2 *view, BSTR key,
+        ULONG location, BSTR modifiers_list, VARIANT_BOOL repeat, BSTR locale)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%s %x %x %p %s %u %s %x %s)\n", This, debugstr_w(type), can_bubble,
+          cancelable, view, debugstr_w(key), location, debugstr_w(modifiers_list),
+          repeat, debugstr_w(locale));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_keyCode(IDOMKeyboardEvent *iface, LONG *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_charCode(IDOMKeyboardEvent *iface, LONG *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_which(IDOMKeyboardEvent *iface, LONG *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_char(IDOMKeyboardEvent *iface, VARIANT *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI DOMKeyboardEvent_get_locale(IDOMKeyboardEvent *iface, BSTR *p)
+{
+    DOMEvent *This = impl_from_IDOMKeyboardEvent(iface);
+    FIXME("(%p)->(%p)\n", This, p);
+    return E_NOTIMPL;
+}
+
+static const IDOMKeyboardEventVtbl DOMKeyboardEventVtbl = {
+    DOMKeyboardEvent_QueryInterface,
+    DOMKeyboardEvent_AddRef,
+    DOMKeyboardEvent_Release,
+    DOMKeyboardEvent_GetTypeInfoCount,
+    DOMKeyboardEvent_GetTypeInfo,
+    DOMKeyboardEvent_GetIDsOfNames,
+    DOMKeyboardEvent_Invoke,
+    DOMKeyboardEvent_get_key,
+    DOMKeyboardEvent_get_location,
+    DOMKeyboardEvent_get_ctrlKey,
+    DOMKeyboardEvent_get_shiftKey,
+    DOMKeyboardEvent_get_altKey,
+    DOMKeyboardEvent_get_metaKey,
+    DOMKeyboardEvent_get_repeat,
+    DOMKeyboardEvent_getModifierState,
+    DOMKeyboardEvent_initKeyboardEvent,
+    DOMKeyboardEvent_get_keyCode,
+    DOMKeyboardEvent_get_charCode,
+    DOMKeyboardEvent_get_which,
+    DOMKeyboardEvent_get_char,
+    DOMKeyboardEvent_get_locale
+};
+
 static const tid_t DOMEvent_iface_tids[] = {
     IDOMEvent_tid,
     0
@@ -1689,6 +1871,7 @@ static DOMEvent *alloc_event(nsIDOMEvent *nsevent, eventid_t event_id)
     event->IDOMEvent_iface.lpVtbl = &DOMEventVtbl;
     event->IDOMUIEvent_iface.lpVtbl = &DOMUIEventVtbl;
     event->IDOMMouseEvent_iface.lpVtbl = &DOMMouseEventVtbl;
+    event->IDOMKeyboardEvent_iface.lpVtbl = &DOMKeyboardEventVtbl;
     event->ref = 1;
     event->event_id = event_id;
     if(event_id != EVENTID_LAST) {
@@ -1718,6 +1901,10 @@ static DOMEvent *alloc_event(nsIDOMEvent *nsevent, eventid_t event_id)
     else
         event->mouse_event = NULL;
 
+    nsres = nsIDOMEvent_QueryInterface(nsevent, &IID_nsIDOMKeyEvent, (void**)&event->keyboard_event);
+    if(NS_FAILED(nsres))
+        event->keyboard_event = NULL;
+
     init_dispex(&event->dispex, (IUnknown*)&event->IDOMEvent_iface, dispex_data);
     return event;
 }
diff --git a/dlls/mshtml/htmlevent.h b/dlls/mshtml/htmlevent.h
index fde9cb9..ccfa5f8 100644
--- a/dlls/mshtml/htmlevent.h
+++ b/dlls/mshtml/htmlevent.h
@@ -61,12 +61,14 @@ typedef struct {
     IDOMEvent IDOMEvent_iface;
     IDOMUIEvent IDOMUIEvent_iface;
     IDOMMouseEvent IDOMMouseEvent_iface;
+    IDOMKeyboardEvent IDOMKeyboardEvent_iface;
 
     LONG ref;
 
     nsIDOMEvent *nsevent;
     nsIDOMUIEvent *ui_event;
     nsIDOMMouseEvent *mouse_event;
+    nsIDOMKeyEvent *keyboard_event;
 
     eventid_t event_id;
     WCHAR *type;
diff --git a/dlls/mshtml/tests/events.c b/dlls/mshtml/tests/events.c
index d8dc8da..a219987 100644
--- a/dlls/mshtml/tests/events.c
+++ b/dlls/mshtml/tests/events.c
@@ -2666,6 +2666,7 @@ static void test_iframe_connections(IHTMLDocument2 *doc)
 
 static void test_create_event(IHTMLDocument2 *doc)
 {
+    IDOMKeyboardEvent *keyboard_event;
     IDOMMouseEvent *mouse_event;
     IDocumentEvent *doc_event;
     IEventTarget *event_target;
@@ -2756,6 +2757,20 @@ static void test_create_event(IHTMLDocument2 *doc)
 
     IDOMEvent_Release(event);
 
+    str = a2bstr("KeyboardEvent");
+    hres = IDocumentEvent_createEvent(doc_event, str, &event);
+    SysFreeString(str);
+    ok(hres == S_OK, "createEvent failed: %08x\n", hres);
+
+    hres = IDOMEvent_QueryInterface(event, &IID_IDOMUIEvent, (void**)&ui_event);
+    ok(hres == S_OK, "QueryInterface(IID_IDOMUIEvent returned %08x\n", hres);
+    IDOMUIEvent_Release(ui_event);
+    hres = IDOMEvent_QueryInterface(event, &IID_IDOMKeyboardEvent, (void**)&keyboard_event);
+    ok(hres == S_OK, "QueryInterface(IID_IDOMKeyboardEvent returned %08x\n", hres);
+    IDOMKeyboardEvent_Release(keyboard_event);
+
+    IDOMEvent_Release(event);
+
     IDocumentEvent_Release(doc_event);
 }
 




More information about the wine-cvs mailing list