From bb9ebab4e7d70e46ebcb9f9f052d6169b054649f Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Fri, 3 Jul 2015 19:19:04 +0300 Subject: [PATCH] fix IDEA not app-napping 1. stop activity after indicator is cancelled 2. don't start activities for delegate indicators --- .../util/AbstractProgressIndicatorBase.java | 13 ++++++++++++- .../openapi/progress/util/ProgressWindow.java | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java b/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java index 2cf43d397fd4..7afd06c91438 100644 --- a/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java +++ b/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java @@ -45,6 +45,7 @@ public class AbstractProgressIndicatorBase extends UserDataHolderBase implements private volatile boolean myIndeterminate; private volatile Object myMacActivity; + private volatile boolean myShouldStartActivity = true; private Stack myTextStack; private DoubleArrayList myFractionStack; @@ -70,7 +71,7 @@ public class AbstractProgressIndicatorBase extends UserDataHolderBase implements myText = ""; myFraction = 0; myText2 = ""; - myMacActivity = MacUtil.wakeUpNeo(toString()); + startSystemActivity(); myRunning = true; } @@ -85,6 +86,14 @@ public class AbstractProgressIndicatorBase extends UserDataHolderBase implements LOG.assertTrue(myRunning, "stop() should be called only if start() called before"); myRunning = false; myFinished = true; + stopSystemActivity(); + } + + protected void startSystemActivity() { + myMacActivity = myShouldStartActivity ? MacUtil.wakeUpNeo(toString()) : null; + } + + protected void stopSystemActivity() { MacUtil.matrixHasYou(myMacActivity); myMacActivity = null; } @@ -97,6 +106,7 @@ public class AbstractProgressIndicatorBase extends UserDataHolderBase implements @Override public void cancel() { myCanceled = true; + stopSystemActivity(); ProgressManager.canceled(this); } @@ -246,6 +256,7 @@ public class AbstractProgressIndicatorBase extends UserDataHolderBase implements myFractionStack = new DoubleArrayList(stacked.getFractionStack()); } + myShouldStartActivity = false; } @Override 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 9487ec1cce9a..cb9785d74580 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 @@ -394,6 +394,7 @@ public class ProgressWindow extends ProgressIndicatorBase implements BlockingPro @Override public void dispose() { + stopSystemActivity(); } @Override