From 980e34376aac27c055cdac3d8e992aa64ff47d58 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sun, 26 Feb 2012 02:07:18 +0100 Subject: [PATCH] modality wars --- .../ide/diff/VirtualFileDiffElement.java | 35 ++++++++----------- .../diff/impl/dir/DirDiffManagerImpl.java | 2 +- .../diff/impl/dir/DirDiffTableModel.java | 26 ++++---------- 3 files changed, 22 insertions(+), 41 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java b/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java index 422fb29338da..90ec7c08a626 100644 --- a/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java +++ b/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,6 @@ import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.application.AccessToken; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.diff.DiffRequest; import com.intellij.openapi.editor.Document; @@ -271,31 +269,26 @@ public class VirtualFileDiffElement extends DiffElement { final FileDocumentManager manager = FileDocumentManager.getInstance(); for (Document document : manager.getUnsavedDocuments()) { VirtualFile file = manager.getFile(document); - if (file!=null && VfsUtilCore.isAncestor(virtualFile, file, false)) { + if (file != null && VfsUtilCore.isAncestor(virtualFile, file, false)) { docsToSave.add(document); } } if (!docsToSave.isEmpty()) { - ApplicationManager.getApplication().invokeAndWait(new Runnable() { - @Override - public void run() { - AccessToken token = WriteAction.start(); - try { - for (Document document : docsToSave) { - manager.saveDocument(document); - } - } - finally { - token.finish(); - } + AccessToken token = WriteAction.start(); + try { + for (Document document : docsToSave) { + manager.saveDocument(document); } - }, ModalityState.defaultModalityState()); + } + finally { + token.finish(); + } } + if (!FileWatcher.getInstance().isWatched(virtualFile)) { + ((NewVirtualFile)virtualFile).markDirtyRecursively(); + } + virtualFile.refresh(true, true); } - if (!FileWatcher.getInstance().isWatched(virtualFile)) { - ((NewVirtualFile)virtualFile).markDirtyRecursively(); - } - virtualFile.refresh(false, true); } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java index c4126cccdf75..cdd2727419d1 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java @@ -54,7 +54,7 @@ public class DirDiffManagerImpl extends DirDiffManager { frame.show(); } else { DirDiffDialog dirDiffDialog = new DirDiffDialog(myProject, model); - if (myProject == null || myProject.isDefault() || isFromModalDialog(myProject)) { + if (myProject == null || myProject.isDefault()/* || isFromModalDialog(myProject)*/) { dirDiffDialog.setModal(true); } setWindowListener(onWindowClose, dirDiffDialog.getOwner()); diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java index cd0a9ca34abb..1964b1c72218 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java @@ -24,7 +24,7 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ex.ApplicationManagerEx; +import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; @@ -206,8 +206,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode myUpdating.set(true); final JBLoadingPanel loadingPanel = getLoadingPanel(); loadingPanel.startLoading(); - - final Runnable action = new Runnable() { + ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { try { updater = new Updater(loadingPanel, 100); @@ -229,12 +228,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode applySettings(); } } - }; - if (DirDiffManagerImpl.isFromModalDialog(myProject)) { - action.run(); - } else { - ApplicationManager.getApplication().executeOnPooledThread(action); - } + }); } private void reportException(final String htmlContent) { @@ -285,7 +279,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode clear(); myElements.addAll(elements); myUpdating.set(false); - myTable.revalidate(); + fireTableDataChanged(); DirDiffTableModel.this.text.set(""); if (loadingPanel.isLoading()) { loadingPanel.stopLoading(); @@ -301,13 +295,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode if (myProject.isDefault()) { SwingUtilities.invokeLater(uiThread); } else { - final AccessToken token = ApplicationManager.getApplication().acquireReadActionLock(); - try { - ApplicationManagerEx.getApplicationEx().runEdtSafeAction(uiThread); - } - finally { - token.finish(); - } + app.invokeLater(uiThread, ModalityState.any()); } } }); @@ -779,7 +767,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode } catch (InterruptedException e) {// } - SwingUtilities.invokeLater(new Runnable() { + ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { final String s = text.get(); @@ -787,7 +775,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode myLoadingPanel.setLoadingText(s); } } - }); + }, ModalityState.stateForComponent(myLoadingPanel)); updater = new Updater(myLoadingPanel, mySleep); updater.start(); } else {