bool StGLMenu::tryUnClick(const StClickEvent& theEvent, bool& theIsItemUnclicked) { myKeepActive = false; bool wasSomeClickedBefore = theIsItemUnclicked; bool isSelfClicked = StGLWidget::tryUnClick(theEvent, theIsItemUnclicked); bool isSelfItemClicked = !wasSomeClickedBefore && theIsItemUnclicked; if(myKeepActive) { return isSelfClicked; } for(StGLWidget* aChild = getChildren()->getStart(); aChild != NULL; aChild = aChild->getNext()) { StGLMenuItem* anItem = (StGLMenuItem* )aChild; if(anItem->hasSubMenu() && anItem->getSubMenu()->myKeepActive) { myKeepActive = true; return isSelfClicked; } anItem->setSelected(false); } if(myIsRootMenu && !isSelfItemClicked) { setActive(false); // deactivate root menu } if(myIsContextual) { myRoot->destroyWithDelay(this); } return isSelfClicked; }