static HRESULT WINAPI HTMLEventObj_get_shiftKey(IHTMLEventObj *iface, VARIANT_BOOL *p) { HTMLEventObj *This = impl_from_IHTMLEventObj(iface); cpp_bool ret = FALSE; TRACE("(%p)->(%p)\n", This, p); if(This->nsevent) { nsIDOMKeyEvent *key_event; nsresult nsres; nsres = nsIDOMEvent_QueryInterface(This->nsevent, &IID_nsIDOMKeyEvent, (void**)&key_event); if(NS_SUCCEEDED(nsres)) { nsIDOMKeyEvent_GetShiftKey(key_event, &ret); nsIDOMKeyEvent_Release(key_event); }else { nsIDOMMouseEvent *mouse_event; nsres = nsIDOMEvent_QueryInterface(This->nsevent, &IID_nsIDOMMouseEvent, (void**)&mouse_event); if(NS_SUCCEEDED(nsres)) { nsIDOMMouseEvent_GetShiftKey(mouse_event, &ret); nsIDOMMouseEvent_Release(mouse_event); } } } *p = ret ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; }
static HRESULT HTMLAnchorElement_handle_event(HTMLDOMNode *iface, eventid_t eid, nsIDOMEvent *event, BOOL *prevent_default) { HTMLAnchorElement *This = impl_from_HTMLDOMNode(iface); if(eid == EVENTID_CLICK) { nsIDOMMouseEvent *mouse_event; UINT16 button; nsresult nsres; TRACE("CLICK\n"); nsres = nsIDOMEvent_QueryInterface(event, &IID_nsIDOMMouseEvent, (void**)&mouse_event); assert(nsres == NS_OK); nsres = nsIDOMMouseEvent_GetButton(mouse_event, &button); assert(nsres == NS_OK); nsIDOMMouseEvent_Release(mouse_event); switch(button) { case 0: *prevent_default = TRUE; return navigate_anchor(This); case 1: *prevent_default = TRUE; return navigate_anchor_window(This, NULL); default: *prevent_default = FALSE; return S_OK; } } return HTMLElement_handle_event(&This->element.node, eid, event, prevent_default); }
static nsresult NSAPI nsContextMenuListener_OnShowContextMenu(nsIContextMenuListener *iface, PRUint32 aContextFlags, nsIDOMEvent *aEvent, nsIDOMNode *aNode) { NSContainer *This = NSCML_THIS(iface); nsIDOMMouseEvent *event; POINT pt; DWORD dwID = CONTEXT_MENU_DEFAULT; nsresult nsres; TRACE("(%p)->(%08lx %p %p)\n", This, aContextFlags, aEvent, aNode); nsres = nsIDOMEvent_QueryInterface(aEvent, &IID_nsIDOMMouseEvent, (void**)&event); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMMouseEvent interface: %08lx\n", nsres); return nsres; } nsIDOMMouseEvent_GetScreenX(event, &pt.x); nsIDOMMouseEvent_GetScreenY(event, &pt.y); nsIDOMMouseEvent_Release(event); switch(aContextFlags) { case CONTEXT_NONE: case CONTEXT_DOCUMENT: case CONTEXT_TEXT: dwID = CONTEXT_MENU_DEFAULT; break; case CONTEXT_IMAGE: case CONTEXT_IMAGE|CONTEXT_LINK: dwID = CONTEXT_MENU_IMAGE; break; case CONTEXT_LINK: dwID = CONTEXT_MENU_ANCHOR; break; case CONTEXT_INPUT: dwID = CONTEXT_MENU_CONTROL; break; default: FIXME("aContextFlags=%08lx\n", aContextFlags); }; HTMLDocument_ShowContextMenu(This->doc, dwID, &pt); return NS_OK; }
static HRESULT WINAPI HTMLEventObj_get_screenY(IHTMLEventObj *iface, LONG *p) { HTMLEventObj *This = impl_from_IHTMLEventObj(iface); LONG y = 0; TRACE("(%p)->(%p)\n", This, p); if(This->nsevent) { nsIDOMMouseEvent *mouse_event; nsresult nsres; nsres = nsIDOMEvent_QueryInterface(This->nsevent, &IID_nsIDOMMouseEvent, (void**)&mouse_event); if(NS_SUCCEEDED(nsres)) { nsIDOMMouseEvent_GetScreenY(mouse_event, &y); nsIDOMMouseEvent_Release(mouse_event); } } *p = y; return S_OK; }
HRESULT handle_link_click_event(HTMLElement *element, nsAString *href_str, nsAString *target_str, nsIDOMEvent *event, BOOL *prevent_default) { nsIDOMMouseEvent *mouse_event; INT16 button; nsresult nsres; HRESULT hres; TRACE("CLICK\n"); nsres = nsIDOMEvent_QueryInterface(event, &IID_nsIDOMMouseEvent, (void**)&mouse_event); assert(nsres == NS_OK); nsres = nsIDOMMouseEvent_GetButton(mouse_event, &button); assert(nsres == NS_OK); nsIDOMMouseEvent_Release(mouse_event); switch(button) { case 0: *prevent_default = TRUE; hres = navigate_href(element, href_str, target_str); break; case 1: *prevent_default = TRUE; hres = navigate_href_new_window(element, href_str, NULL); break; default: *prevent_default = FALSE; hres = S_OK; } nsAString_Finish(href_str); nsAString_Finish(target_str); return hres; }