static HRESULT WINAPI HTMLEventObj_get_keyCode(IHTMLEventObj *iface, LONG *p) { HTMLEventObj *This = impl_from_IHTMLEventObj(iface); UINT32 key_code = 0; 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_GetKeyCode(key_event, &key_code); nsIDOMKeyEvent_Release(key_event); } } *p = key_code; return S_OK; }
void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event) { nsIDOMKeyEvent *key_event; UINT32 code; nsIDOMEvent_QueryInterface(event, &IID_nsIDOMKeyEvent, (void**)&key_event); nsIDOMKeyEvent_GetKeyCode(key_event, &code); switch(code) { case DOM_VK_LEFT: { static const char * const cmds[] = { NSCMD_CHARPREVIOUS, NSCMD_WORDPREVIOUS, NSCMD_SELECTCHARPREVIOUS, NSCMD_SELECTWORDPREVIOUS }; TRACE("left\n"); handle_arrow_key(This, event, key_event, cmds); break; } case DOM_VK_RIGHT: { static const char * const cmds[] = { NSCMD_CHARNEXT, NSCMD_WORDNEXT, NSCMD_SELECTCHARNEXT, NSCMD_SELECTWORDNEXT }; TRACE("right\n"); handle_arrow_key(This, event, key_event, cmds); break; } case DOM_VK_UP: { static const char * const cmds[] = { NSCMD_LINEPREVIOUS, NSCMD_MOVEPAGEUP, NSCMD_SELECTLINEPREVIOUS, NSCMD_SELECTPAGEUP }; TRACE("up\n"); handle_arrow_key(This, event, key_event, cmds); break; } case DOM_VK_DOWN: { static const char * const cmds[] = { NSCMD_LINENEXT, NSCMD_MOVEPAGEDOWN, NSCMD_SELECTLINENEXT, NSCMD_SELECTPAGEDOWN }; TRACE("down\n"); handle_arrow_key(This, event, key_event, cmds); break; } case DOM_VK_DELETE: { static const char * const cmds[] = { NSCMD_DELETECHARFORWARD, NSCMD_DELETEWORDFORWARD, NULL, NULL }; TRACE("delete\n"); handle_arrow_key(This, event, key_event, cmds); break; } case DOM_VK_HOME: { static const char * const cmds[] = { NSCMD_BEGINLINE, NSCMD_MOVETOP, NSCMD_SELECTBEGINLINE, NSCMD_SELECTTOP }; TRACE("home\n"); handle_arrow_key(This, event, key_event, cmds); break; } case DOM_VK_END: { static const char * const cmds[] = { NSCMD_ENDLINE, NSCMD_MOVEBOTTOM, NSCMD_SELECTENDLINE, NSCMD_SELECTBOTTOM }; TRACE("end\n"); handle_arrow_key(This, event, key_event, cmds); break; } } nsIDOMKeyEvent_Release(key_event); }