diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressDialog.java b/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressDialog.java index 1f5337950a82..45ca402362fe 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressDialog.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressDialog.java @@ -13,7 +13,6 @@ import com.intellij.openapi.ui.impl.GlassPaneDialogWrapperPeer; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.ui.PopupBorder; import com.intellij.ui.TitlePanel; import com.intellij.ui.WindowMoveListener; @@ -85,22 +84,9 @@ class ProgressDialog implements Disposable { private final SingleAlarm myDisableCancelAlarm = new SingleAlarm(this::setCancelButtonDisabledInEDT, 500, ModalityState.any(),this); private final SingleAlarm myEnableCancelAlarm = new SingleAlarm(this::setCancelButtonEnabledInEDT, 500, ModalityState.any(),this); - ProgressDialog(@NotNull ProgressWindow progressWindow, - boolean shouldShowBackground, - @Nullable Component parent, - @Nullable Project project, - String cancelText) { + ProgressDialog(@NotNull ProgressWindow progressWindow, boolean shouldShowBackground, String cancelText, @Nullable Window parentWindow) { myProgressWindow = progressWindow; - if (parent != null) { - myParentWindow = UIUtil.getWindow(parent); - } - else { - Window parentWindow = WindowManager.getInstance().suggestParentWindow(project); - if (parentWindow == null) { - parentWindow = WindowManagerEx.getInstanceEx().getMostRecentFocusedWindow(); - } - myParentWindow = parentWindow; - } + myParentWindow = parentWindow; initDialog(shouldShowBackground, cancelText); } diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java b/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java index 76d44e7b8da3..cb309cf45eba 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/util/ProgressWindow.java @@ -30,7 +30,9 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.EmptyRunnable; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.ProgressIndicatorEx; +import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.util.IncorrectOperationException; import com.intellij.util.messages.Topic; import com.intellij.util.ui.UIUtil; @@ -92,23 +94,27 @@ public class ProgressWindow extends ProgressIndicatorBase implements BlockingPro myProject = project; myShouldShowCancel = shouldShowCancel; myCancelText = cancelText; - setModalityProgress(shouldShowBackground ? null : this); - - Component parent = parentComponent; - if (parent == null && project == null && !ApplicationManager.getApplication().isHeadlessEnvironment()) { - parent = JOptionPane.getRootFrame(); - } - - myDialog = new ProgressDialog(this, shouldShowBackground, parent, myProject, myCancelText); - - Disposer.register(this, myDialog); - - addStateDelegate(new MyDelegate()); - ApplicationManager.getApplication().getMessageBus().syncPublisher(TOPIC).progressWindowCreated(this); if (myProject != null) { Disposer.register(myProject, this); } + myDialog = new ProgressDialog(this, shouldShowBackground, myCancelText, calcParentWindow(parentComponent)); + Disposer.register(this, myDialog); + + setModalityProgress(shouldShowBackground ? null : this); + addStateDelegate(new MyDelegate()); + ApplicationManager.getApplication().getMessageBus().syncPublisher(TOPIC).progressWindowCreated(this); + } + + private Window calcParentWindow(@Nullable Component parent) { + if (parent == null && myProject == null && !ApplicationManager.getApplication().isHeadlessEnvironment()) { + parent = JOptionPane.getRootFrame(); + } + if (parent != null) { + return UIUtil.getWindow(parent); + } + Window parentWindow = WindowManager.getInstance().suggestParentWindow(myProject); + return parentWindow != null ? parentWindow : WindowManagerEx.getInstanceEx().getMostRecentFocusedWindow(); } @Override