From 6b01f43703452a47e5c6be9ccda573e960e89986 Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Fri, 23 Oct 2009 16:19:25 +0400 Subject: [PATCH] allow to exit w/o confirmation for processes which run w/o visible progresses (i.e. highlighting, etc) --- .../src/com/intellij/openapi/progress/ProgressManager.java | 1 + .../com/intellij/openapi/application/impl/ApplicationImpl.java | 4 ++-- .../com/intellij/openapi/progress/impl/ProgressManagerImpl.java | 9 ++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java b/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java index d12d4797f0..e3ea4a8570 100644 --- a/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java +++ b/platform/platform-api/src/com/intellij/openapi/progress/ProgressManager.java @@ -33,6 +33,7 @@ public abstract class ProgressManager { public abstract boolean hasProgressIndicator(); public abstract boolean hasModalProgressIndicator(); + public abstract boolean hasUnsafeProgressIndicator(); public abstract void runProcess(Runnable process, ProgressIndicator progress) throws ProcessCanceledException; diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 502b89ba5d..4cb9309342 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -648,8 +648,8 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application } private static boolean showConfirmation() { - boolean hasBgTasks = ProgressManager.getInstance().hasProgressIndicator(); - final ConfirmExitDialog confirmExitDialog = new ConfirmExitDialog(hasBgTasks); + final boolean hasUnsafeBgTasks = ProgressManager.getInstance().hasUnsafeProgressIndicator(); + final ConfirmExitDialog confirmExitDialog = new ConfirmExitDialog(hasUnsafeBgTasks); if (confirmExitDialog.isToBeShown()) { confirmExitDialog.show(); if (!confirmExitDialog.isOK()) { diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/impl/ProgressManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/progress/impl/ProgressManagerImpl.java index 96486eccfe..286d21c7aa 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/impl/ProgressManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/impl/ProgressManagerImpl.java @@ -44,6 +44,7 @@ public class ProgressManagerImpl extends ProgressManager { private static final ThreadLocal myThreadIndicator = new ThreadLocal(); private final AtomicInteger myCurrentProgressCount = new AtomicInteger(0); + private final AtomicInteger myCurrentUnsafeProgressCount = new AtomicInteger(0); private final AtomicInteger myCurrentModalProgressCount = new AtomicInteger(0); private static volatile int ourLockedCheckCounter = 0; @@ -169,11 +170,15 @@ public class ProgressManagerImpl extends ProgressManager { return myCurrentProgressCount.get() > 0; } + public boolean hasUnsafeProgressIndicator() { + return myCurrentUnsafeProgressCount.get() > 0; + } + public boolean hasModalProgressIndicator() { return myCurrentModalProgressCount.get() > 0; } - public void runProcess(@NotNull final Runnable process, final ProgressIndicator progress) throws ProcessCanceledException { + public void runProcess(@NotNull final Runnable process, final ProgressIndicator progress) { executeProcessUnderProgress(new Runnable(){ public void run() { synchronized (process) { @@ -205,6 +210,7 @@ public class ProgressManagerImpl extends ProgressManager { final boolean modal = progress != null && progress.isModal(); if (modal) myCurrentModalProgressCount.incrementAndGet(); + if (progress == null || progress instanceof ProgressWindow) myCurrentUnsafeProgressCount.incrementAndGet(); try { process.run(); @@ -214,6 +220,7 @@ public class ProgressManagerImpl extends ProgressManager { myCurrentProgressCount.decrementAndGet(); if (modal) myCurrentModalProgressCount.decrementAndGet(); + if (progress == null || progress instanceof ProgressWindow) myCurrentUnsafeProgressCount.decrementAndGet(); } } -- 2.11.4.GIT