void RenderMenuList::showPopup() { if (m_popupIsVisible) return; if (document()->page()->chrome().hasOpenedPopup()) return; // Create m_innerBlock here so it ends up as the first child. // This is important because otherwise we might try to create m_innerBlock // inside the showPopup call and it would fail. createInnerBlock(); if (!m_popup) m_popup = document()->page()->chrome().createPopupMenu(this); m_popupIsVisible = true; // Compute the top left taking transforms into account, but use // the actual width of the element to size the popup. FloatPoint absTopLeft = localToAbsolute(FloatPoint(), UseTransforms); IntRect absBounds = absoluteBoundingBoxRectIgnoringTransforms(); absBounds.setLocation(roundedIntPoint(absTopLeft)); HTMLSelectElement* select = selectElement(); m_popup->show(absBounds, document()->view(), select->optionToListIndex(select->selectedIndex())); }
int RenderMenuList::selectedIndex() const { HTMLSelectElement* select = selectElement(); return select->optionToListIndex(select->selectedIndex()); }
int RenderMenuList::selectedIndex() const { HTMLSelectElement* select = static_cast<HTMLSelectElement*>(node()); return select->optionToListIndex(select->selectedIndex()); }