void (int forIndex, boolean withTimer) { if (getIndexForShowingChild() == forIndex) return; disposeChildren(); if (myShowSubmenuTimer != null && myShowSubmenuTimer.isRunning()) { myShowSubmenuTimer.stop(); myShowSubmenuTimer = null; } ListPopupStep<Object> listStep = getListStep(); Object selectedValue = myListModel.getElementAt(forIndex); if (withTimer) { ClientId currentClientId = ClientId.getCurrent(); myShowSubmenuTimer = new Timer(250, e -> { try (AccessToken ignore = ClientId.withClientId(currentClientId)) { if (!isDisposed() && myLastSelectedIndex == forIndex) { disposeChildren(); showNextStepPopup(listStep.onChosen(selectedValue, false), selectedValue); } } }); myShowSubmenuTimer.setRepeats(false); myShowSubmenuTimer.start(); } else { showNextStepPopup(listStep.onChosen(selectedValue, false), selectedValue); } }