void () { if (myDialog != null && myDialog.isVisible()) { return; } if (myDialog != null && !myDialog.isDisposed()) { myDialog.doCancelAction(); } if (myDialog == null || myDialog.isDisposed()) { myDialog = new DialogWrapper(myHelper.getProject(), null, true, DialogWrapper.IdeModalityType.MODELESS, false) { { init(); getRootPane().setDefaultButton(null); } @Override protected void doOKAction() { myOkActionListener.actionPerformed(null); } @Override protected void dispose() { saveSettings(); super.dispose(); } @Nullable @Override protected Border createContentPaneBorder() { return null; } @Override protected JComponent createCenterPanel() { return FindPopupPanel.this; } @Override protected String getDimensionServiceKey() { return SERVICE_KEY; } }; myDialog.setUndecorated(true); if (WindowRoundedCornersManager.isAvailable()) { WindowRoundedCornersManager.setRoundedCorners(myDialog.getWindow()); } ApplicationManager.getApplication().getMessageBus().connect(myDialog.getDisposable()).subscribe(ProjectCloseListener.TOPIC, new ProjectCloseListener() { @Override public void projectClosed(@NotNull Project project) { closeImmediately(); } }); Disposer.register(myDialog.getDisposable(), myDisposable); Window window = WindowManager.getInstance().suggestParentWindow(myProject); Component parent = UIUtil.findUltimateParent(window); RelativePoint showPoint = null; Point screenPoint = DimensionService.getInstance().getLocation(SERVICE_KEY, myProject); if (screenPoint != null) { if (parent != null) { SwingUtilities.convertPointFromScreen(screenPoint, parent); showPoint = new RelativePoint(parent, screenPoint); } else { showPoint = new RelativePoint(screenPoint); } } if (parent != null && showPoint == null) { int height = UISettings.getInstance().getShowNavigationBar() ? 135 : 115; if (parent instanceof IdeFrameImpl && ((IdeFrameImpl)parent).isInFullScreen()) { height -= 20; } showPoint = new RelativePoint(parent, new Point((parent.getSize().width - getPreferredSize().width) / 2, height)); } ApplicationManager.getApplication().invokeLater(() -> { if (mySearchComponent.getCaret() != null) { mySearchComponent.selectAll(); } }); new WindowMoveListener(this) .installTo(header.panel) .installTo(this); Dimension panelSize = getPreferredSize(); Dimension prev = DimensionService.getInstance().getSize(SERVICE_KEY, myProject); panelSize.width += JBUIScale.scale(24);//hidden 'loading' icon panelSize.height *= 2; if (prev != null && prev.height < panelSize.height) prev.height = panelSize.height; Window dialogWindow = myDialog.getPeer().getWindow(); AnAction escape = ActionManager.getInstance().getAction("EditorEscape"); JRootPane root = ((RootPaneContainer)dialogWindow).getRootPane(); IdeGlassPaneEx glass = (IdeGlassPaneEx)myDialog.getRootPane().getGlassPane(); boolean toolkitCannotResizeUndecorated = !StartupUiUtil.isWaylandToolkit(); if (toolkitCannotResizeUndecorated) { new WindowResizeListenerEx(glass, root, JBUI.insets(4), null) .install(myDisposable); } DumbAwareAction.create(e -> closeImmediately()) .registerCustomShortcutSet(escape == null ? CommonShortcuts.ESCAPE : escape.getShortcutSet(), root, myDisposable); root.setWindowDecorationStyle(JRootPane.NONE); root.setBorder(PopupBorder.Factory.create(true, true)); UIUtil.markAsPossibleOwner((Dialog)dialogWindow); dialogWindow.setBackground(UIUtil.getPanelBackground()); dialogWindow.setMinimumSize(panelSize); if (prev == null) { panelSize.height *= 1.5; panelSize.width *= 1.15; } dialogWindow.setSize(prev != null ? prev : panelSize); IdeEventQueue.getInstance().getPopupManager().closeAllPopups(false); if (showPoint != null) { myDialog.setLocation(showPoint.getScreenPoint()); } else { dialogWindow.setLocationRelativeTo(null); } mySuggestRegexHintForEmptyResults = true; myDialog.show(); myDialog.setOnDeactivationAction(() -> closeIfPossible()); JRootPane rootPane = getRootPane(); if (rootPane != null) { if (myHelper.isReplaceState()) { rootPane.setDefaultButton(myReplaceSelectedButton); } rootPane.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(ENTER_WITH_MODIFIERS, "openInFindWindow"); rootPane.getActionMap().put("openInFindWindow", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { myOkActionListener.actionPerformed(null); } }); } ApplicationManager.getApplication().invokeLater(this::scheduleResultsUpdate, ModalityState.any()); } }