void (@NotNull JRootPane pane) { List<MyInlineProgressIndicator> indicators = new ArrayList<>(); for (MyInlineProgressIndicator indicator : myIndicators) { if (indicator.presentationModeProgressPanel == null) { if (myVisible == myMaxVisible) { continue; } myVisible++; indicator.presentationModeProgressPanel = new PresentationModeProgressPanel(indicator); indicator.updateProgressNow(); indicator.presentationModeBalloon = create(pane, indicator, indicator.presentationModeProgressPanel.getProgressPanel()); indicator.presentationModeShowBalloon = true; indicators.add(indicator); } else if (!indicator.presentationModeBalloon.isDisposed()) { indicators.add(indicator); } } for (MyInlineProgressIndicator indicator : indicators) { if (indicator.presentationModeShowBalloon) { indicator.presentationModeShowBalloon = false; indicator.presentationModeBalloon.show(new PositionTracker<>(getAnchor(pane)) { @Override public RelativePoint recalculateLocation(@NotNull Balloon balloon) { Component c = getAnchor(pane); int y = c.getHeight() - JBUIScale.scale(45); BalloonLayoutImpl balloonLayout = getBalloonLayout(pane); if (balloonLayout != null && !isBottomSideToolWindowsVisible(pane)) { Component component = balloonLayout.getTopBalloonComponent(); if (component != null) { y = SwingUtilities.convertPoint(component, 0, -JBUIScale.scale(45), c).y; } } if (myVisible > 1) { int index = myIndicators.indexOf(indicator); int rowHeight = balloon.getPreferredSize().height + JBUI.scale(5); y -= rowHeight * (myVisible - index - 1); } return new RelativePoint(c, new Point(c.getWidth() - JBUIScale.scale(150), y)); } }, Balloon.Position.above); } else { indicator.presentationModeBalloon.revalidate(); } } }