/* boolean handleKeyPress (in nsIDOMKeyEvent keyEvent); */ NS_IMETHODIMP nsMenuBoxObject::HandleKeyPress(nsIDOMKeyEvent* aKeyEvent, bool* aHandledFlag) { *aHandledFlag = PR_FALSE; NS_ENSURE_ARG(aKeyEvent); nsXULPopupManager* pm = nsXULPopupManager::GetInstance(); if (!pm) return NS_OK; // if event has already been handled, bail nsCOMPtr<nsIDOMNSEvent> domNSEvent = do_QueryInterface(aKeyEvent); if (!domNSEvent) return NS_OK; bool eventHandled = false; domNSEvent->GetPreventDefault(&eventHandled); if (eventHandled) return NS_OK; if (nsMenuBarListener::IsAccessKeyPressed(aKeyEvent)) return NS_OK; nsIFrame* frame = GetFrame(PR_FALSE); if (!frame || frame->GetType() != nsGkAtoms::menuFrame) return NS_OK; nsMenuPopupFrame* popupFrame = static_cast<nsMenuFrame *>(frame)->GetPopup(); if (!popupFrame) return NS_OK; PRUint32 keyCode; aKeyEvent->GetKeyCode(&keyCode); switch (keyCode) { case NS_VK_UP: case NS_VK_DOWN: case NS_VK_HOME: case NS_VK_END: { nsNavigationDirection theDirection; theDirection = NS_DIRECTION_FROM_KEY_CODE(popupFrame, keyCode); *aHandledFlag = pm->HandleKeyboardNavigationInPopup(popupFrame, theDirection); return NS_OK; } default: *aHandledFlag = pm->HandleShortcutNavigation(aKeyEvent, popupFrame); return NS_OK; } }
/* boolean handleKeyPress (in nsIDOMKeyEvent keyEvent); */ NS_IMETHODIMP nsMenuBoxObject::HandleKeyPress(nsIDOMKeyEvent* aKeyEvent, bool* aHandledFlag) { *aHandledFlag = false; NS_ENSURE_ARG(aKeyEvent); nsXULPopupManager* pm = nsXULPopupManager::GetInstance(); if (!pm) return NS_OK; // if event has already been handled, bail bool eventHandled = false; aKeyEvent->GetPreventDefault(&eventHandled); if (eventHandled) return NS_OK; if (nsMenuBarListener::IsAccessKeyPressed(aKeyEvent)) return NS_OK; nsMenuFrame* menu = do_QueryFrame(GetFrame(false)); if (!menu) return NS_OK; nsMenuPopupFrame* popupFrame = menu->GetPopup(); if (!popupFrame) return NS_OK; uint32_t keyCode; aKeyEvent->GetKeyCode(&keyCode); switch (keyCode) { case NS_VK_UP: case NS_VK_DOWN: case NS_VK_HOME: case NS_VK_END: { nsNavigationDirection theDirection; theDirection = NS_DIRECTION_FROM_KEY_CODE(popupFrame, keyCode); *aHandledFlag = pm->HandleKeyboardNavigationInPopup(popupFrame, theDirection); return NS_OK; } default: *aHandledFlag = pm->HandleShortcutNavigation(aKeyEvent, popupFrame); return NS_OK; } }