void (@NotNull AnActionEvent e, @NotNull JComponent contentPanel, boolean next) { if (!contentPanel.isShowing()) return; Editor editor = e.getData(DiffDataKeys.CURRENT_EDITOR); // TODO: provide "change" word in chain UserData - for tests/etc String message = DiffUtil.createNotificationText(next ? DiffBundle.message("press.again.to.go.to.the.next.file") : DiffBundle.message("press.again.to.go.to.the.previous.file"), DiffBundle.message("notification.you.can.disable.this.feature.in.0", DiffUtil.getSettingsConfigurablePath())); final LightweightHint hint = new LightweightHint(HintUtil.createInformationLabel(message)); Point point = new Point(contentPanel.getWidth() / 2, next ? contentPanel.getHeight() - JBUIScale.scale(40) : JBUIScale.scale(40)); if (editor == null || editor.isDisposed()) { final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); final HintHint hintHint = createNotifyHint(contentPanel, point, next); hint.show(contentPanel, point.x, point.y, owner instanceof JComponent ? (JComponent)owner : null, hintHint); } else { int x = SwingUtilities.convertPoint(contentPanel, point, editor.getComponent()).x; JComponent header = editor.getHeaderComponent(); int shift = editor.getScrollingModel().getVerticalScrollOffset() - (header != null ? header.getHeight() : 0); LogicalPosition position; LineRange changeRange = e.getData(DiffDataKeys.CURRENT_CHANGE_RANGE); if (changeRange == null) { position = new LogicalPosition(editor.getCaretModel().getLogicalPosition().line + (next ? 1 : 0), 0); } else { position = new LogicalPosition(next ? changeRange.end : changeRange.start, 0); } int y = editor.logicalPositionToXY(position).y - shift; Point editorPoint = new Point(x, y); final HintHint hintHint = createNotifyHint(editor.getComponent(), editorPoint, !next); HintManagerImpl.getInstanceImpl().showEditorHint(hint, editor, editorPoint, HintManager.HIDE_BY_ANY_KEY | HintManager.HIDE_BY_TEXT_CHANGE | HintManager.HIDE_BY_SCROLLING, 0, false, hintHint); } }