diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/CompareValueWithClipboardAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/CompareValueWithClipboardAction.java index ab449e0eecc2..2d27120d1ab0 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/CompareValueWithClipboardAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/CompareValueWithClipboardAction.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.diff.*; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.SystemInfo; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; @@ -50,6 +51,11 @@ public class CompareValueWithClipboardAction extends BaseValueAction { }; } + @Override + public boolean isSafeToCallFromUpdate() { + return !SystemInfo.isMac; + } + public DiffContent[] getContents() { if (myContents != null) return myContents; DiffContent clipboardContent = createClipboardContent(); diff --git a/platform/platform-api/src/com/intellij/openapi/diff/DiffRequest.java b/platform/platform-api/src/com/intellij/openapi/diff/DiffRequest.java index 11e83b66bdab..9e3b88c39dc6 100644 --- a/platform/platform-api/src/com/intellij/openapi/diff/DiffRequest.java +++ b/platform/platform-api/src/com/intellij/openapi/diff/DiffRequest.java @@ -51,6 +51,10 @@ public abstract class DiffRequest { public void setGroupKey(@NonNls String groupKey) { myGroupKey = groupKey; } public Project getProject() { return myProject; } + public boolean isSafeToCallFromUpdate() { + return true; + } + /** * @return contents to compare */ diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/actions/BaseDiffAction.java b/platform/platform-impl/src/com/intellij/openapi/diff/actions/BaseDiffAction.java index ee85cd6296ab..bd441e1ed8be 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/actions/BaseDiffAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/actions/BaseDiffAction.java @@ -49,9 +49,10 @@ abstract class BaseDiffAction extends AnAction implements PreloadableAction, Dum public void update(AnActionEvent e) { DiffRequest diffData = getDiffData(e.getDataContext()); - boolean enabled; - if (diffData == null || diffData.getContents() == null) enabled = false; - else enabled = DiffManager.getInstance().getDiffTool().canShow(diffData); + + boolean enabled = diffData != null && + (!diffData.isSafeToCallFromUpdate() || (diffData.getContents() != null && DiffManager.getInstance().getDiffTool().canShow(diffData))); + Presentation presentation = e.getPresentation(); presentation.setEnabled(enabled); if (enabled) presentation.setVisible(true); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareClipboardWithSelection.java b/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareClipboardWithSelection.java index 12e49e3c18a6..19c558da157c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareClipboardWithSelection.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareClipboardWithSelection.java @@ -24,6 +24,7 @@ import com.intellij.openapi.editor.SelectionModel; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.TextRange; import org.jetbrains.annotations.Nullable; @@ -59,6 +60,11 @@ public class CompareClipboardWithSelection extends BaseDiffAction { }; } + @Override + public boolean isSafeToCallFromUpdate() { + return !SystemInfo.isMac; + } + public DiffContent[] getContents() { if (myContents != null) return myContents; DiffContent clipboardContent = createClipboardContent(); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareFiles.java b/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareFiles.java index 894e6b7fca99..0c84ed3dc329 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareFiles.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareFiles.java @@ -44,7 +44,7 @@ public class CompareFiles extends BaseDiffAction { presentation.setVisible(false); return; } - final boolean canShow = DiffManager.getInstance().getDiffTool().canShow(diffRequest); + final boolean canShow = !diffRequest.isSafeToCallFromUpdate() || DiffManager.getInstance().getDiffTool().canShow(diffRequest); if (ActionPlaces.isPopupPlace(e.getPlace())) { presentation.setVisible(canShow); }