void (final @NotNull Component owner, final int aScreenX, final int aScreenY, final boolean considerForcedXY) { if (UiInterceptors.tryIntercept(this)) return; LOG.assertTrue (!isDisposed()); Dimension size = getContent().getPreferredSize(); Dimension minimumSize = getMinimumSize(); size.width = Math.max(size.width, minimumSize.width); size.height = Math.max(size.height, minimumSize.height); Rectangle targetBounds = new Rectangle(new Point(aScreenX, aScreenY), size); if (getParent() != null && alignByParentBounds) { final Rectangle parentBounds = getParent().getBounds(); parentBounds.x += STEP_X_PADDING; parentBounds.width -= STEP_X_PADDING * 2; ScreenUtil.moveToFit(targetBounds, ScreenUtil.getScreenRectangle( parentBounds.x + parentBounds.width / 2, parentBounds.y + parentBounds.height / 2), null); if (parentBounds.intersects(targetBounds)) { targetBounds.x = getParent().getBounds().x - targetBounds.width - STEP_X_PADDING; } } else { ScreenUtil.moveToFit(targetBounds, ScreenUtil.getScreenRectangle(aScreenX + 1, aScreenY + 1), null); } if (getParent() == null && myIsActiveRoot) { PopupDispatcher.setActiveRoot(this); } else { PopupDispatcher.setShowing(this); } LOG.assertTrue (!isDisposed(), "Disposed popup, parent="+getParent()); super.show(owner, targetBounds.x, targetBounds.y, true); }