nsresult HTMLMenuItemElement::PreHandleEvent(EventChainPreVisitor& aVisitor) { if (aVisitor.mEvent->message == NS_MOUSE_CLICK) { bool originalCheckedValue = false; switch (mType) { case CMD_TYPE_CHECKBOX: originalCheckedValue = mChecked; SetChecked(!originalCheckedValue); aVisitor.mItemFlags |= NS_CHECKED_IS_TOGGLED; break; case CMD_TYPE_RADIO: nsCOMPtr<nsIDOMHTMLMenuItemElement> selectedRadio = GetSelectedRadio(); aVisitor.mItemData = selectedRadio; originalCheckedValue = mChecked; if (!originalCheckedValue) { SetChecked(true); aVisitor.mItemFlags |= NS_CHECKED_IS_TOGGLED; } break; } if (originalCheckedValue) { aVisitor.mItemFlags |= NS_ORIGINAL_CHECKED_VALUE; } // We must cache type because mType may change during JS event. aVisitor.mItemFlags |= mType; } return nsGenericHTMLElement::PreHandleEvent(aVisitor); }
void HTMLMenuItemElement::GetEventTargetParent(EventChainPreVisitor& aVisitor) { if (aVisitor.mEvent->mMessage == eMouseClick) { bool originalCheckedValue = false; switch (mType) { case CMD_TYPE_CHECKBOX: originalCheckedValue = mChecked; SetChecked(!originalCheckedValue); aVisitor.mItemFlags |= NS_CHECKED_IS_TOGGLED; break; case CMD_TYPE_RADIO: // casting back to Element* here to resolve nsISupports ambiguity. Element* supports = GetSelectedRadio(); aVisitor.mItemData = supports; originalCheckedValue = mChecked; if (!originalCheckedValue) { SetChecked(true); aVisitor.mItemFlags |= NS_CHECKED_IS_TOGGLED; } break; } if (originalCheckedValue) { aVisitor.mItemFlags |= NS_ORIGINAL_CHECKED_VALUE; } // We must cache type because mType may change during JS event. aVisitor.mItemFlags |= mType; } nsGenericHTMLElement::GetEventTargetParent(aVisitor); }