private void showSubMenu(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);
      }
    }
private void showSubMenu(int forIndex, boolean withTimer)