mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
GitComplexProcess: don't change "save on frame deactivation" and "sync on frame activation" settings. Instead block save/sync programmatically.
This commit is contained in:
@@ -34,6 +34,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* @author Anton Katilin
|
||||
@@ -44,6 +45,13 @@ public class SaveAndSyncHandler implements ApplicationComponent {
|
||||
private final Runnable myIdleListener;
|
||||
private final PropertyChangeListener myGeneralSettingsListener;
|
||||
private final ProgressManager myProgressManager;
|
||||
|
||||
private final AtomicInteger myBlockSaveOnFrameDeactivationCount = new AtomicInteger();
|
||||
private final AtomicInteger myBlockSyncOnFrameActivationCount = new AtomicInteger();
|
||||
|
||||
public static SaveAndSyncHandler getInstance(){
|
||||
return ApplicationManager.getApplication().getComponent(SaveAndSyncHandler.class);
|
||||
}
|
||||
|
||||
public SaveAndSyncHandler(final FrameStateManager frameStateManager,
|
||||
final FileDocumentManager fileDocumentManager,
|
||||
@@ -109,13 +117,13 @@ public class SaveAndSyncHandler implements ApplicationComponent {
|
||||
}
|
||||
|
||||
// made public for tests
|
||||
public static void saveProjectsAndDocuments() {
|
||||
public void saveProjectsAndDocuments() {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("enter: save()");
|
||||
}
|
||||
if (ApplicationManager.getApplication().isDisposed()) return;
|
||||
|
||||
if (GeneralSettings.getInstance().isSaveOnFrameDeactivation()) {
|
||||
if (myBlockSaveOnFrameDeactivationCount.get() == 0 && GeneralSettings.getInstance().isSaveOnFrameDeactivation()) {
|
||||
FileDocumentManager.getInstance().saveAllDocuments();
|
||||
|
||||
Project[] openProjects = ProjectManagerEx.getInstanceEx().getOpenProjects();
|
||||
@@ -158,8 +166,8 @@ public class SaveAndSyncHandler implements ApplicationComponent {
|
||||
}
|
||||
}
|
||||
|
||||
public static void maybeRefresh(ModalityState modalityState) {
|
||||
if (GeneralSettings.getInstance().isSyncOnFrameActivation()) {
|
||||
public void maybeRefresh(ModalityState modalityState) {
|
||||
if (myBlockSyncOnFrameActivationCount.get() == 0 && GeneralSettings.getInstance().isSyncOnFrameActivation()) {
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("refresh VFS");
|
||||
}
|
||||
@@ -182,4 +190,20 @@ public class SaveAndSyncHandler implements ApplicationComponent {
|
||||
|
||||
session.launch();
|
||||
}
|
||||
|
||||
public void blockSaveOnFrameDeactivation() {
|
||||
myBlockSaveOnFrameDeactivationCount.incrementAndGet();
|
||||
}
|
||||
|
||||
public void unblockSaveOnFrameDeactivation() {
|
||||
myBlockSaveOnFrameDeactivationCount.decrementAndGet();
|
||||
}
|
||||
|
||||
public void blockSyncOnFrameActivation() {
|
||||
myBlockSyncOnFrameActivationCount.incrementAndGet();
|
||||
}
|
||||
|
||||
public void unblockSyncOnFrameActivation() {
|
||||
myBlockSyncOnFrameActivationCount.decrementAndGet();
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -218,7 +218,7 @@ public class FileChooserDialogImpl extends DialogWrapper implements FileChooserD
|
||||
.subscribe(ApplicationActivationListener.TOPIC, new ApplicationActivationListener() {
|
||||
@Override
|
||||
public void applicationActivated(IdeFrame ideFrame) {
|
||||
SaveAndSyncHandler.maybeRefresh(ModalityState.current());
|
||||
SaveAndSyncHandler.getInstance().maybeRefresh(ModalityState.current());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package git4idea.update;
|
||||
|
||||
import com.intellij.ide.GeneralSettings;
|
||||
import com.intellij.ide.SaveAndSyncHandler;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ex.ProjectManagerEx;
|
||||
@@ -50,20 +50,16 @@ public class GitComplexProcess {
|
||||
private final Operation myOperation;
|
||||
|
||||
private final String myFreezeReason;
|
||||
private final GeneralSettings myGeneralSettings;
|
||||
private final ProjectManagerEx myProjectManager;
|
||||
private final GitRepositoryManager myRepositoryManager;
|
||||
private final ChangeListManager myChangeListManager;
|
||||
|
||||
private final boolean mySaveOnFrameDeactivation;
|
||||
private final boolean mySyncOnFrameDeactivation;
|
||||
|
||||
private final TaskDescriptor BLOCK = new TaskDescriptor("", Where.AWT) {
|
||||
@Override public void run(ContinuationContext context) {
|
||||
myProjectManager.blockReloadingProjectOnExternalChanges();
|
||||
FileDocumentManager.getInstance().saveAllDocuments();
|
||||
myGeneralSettings.setSaveOnFrameDeactivation(false);
|
||||
myGeneralSettings.setSyncOnFrameActivation(false);
|
||||
SaveAndSyncHandler.getInstance().blockSaveOnFrameDeactivation();
|
||||
SaveAndSyncHandler.getInstance().blockSyncOnFrameActivation();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -82,8 +78,8 @@ public class GitComplexProcess {
|
||||
private final TaskDescriptor UNBLOCK = new TaskDescriptor("", Where.AWT) {
|
||||
@Override public void run(ContinuationContext context) {
|
||||
myProjectManager.unblockReloadingProjectOnExternalChanges();
|
||||
myGeneralSettings.setSaveOnFrameDeactivation(mySaveOnFrameDeactivation);
|
||||
myGeneralSettings.setSyncOnFrameActivation(mySyncOnFrameDeactivation);
|
||||
SaveAndSyncHandler.getInstance().unblockSaveOnFrameDeactivation();
|
||||
SaveAndSyncHandler.getInstance().unblockSyncOnFrameActivation();
|
||||
}
|
||||
|
||||
@Override public boolean isHaveMagicCure() {
|
||||
@@ -103,14 +99,10 @@ public class GitComplexProcess {
|
||||
myOperation = operation;
|
||||
myFreezeReason = "Local changes are not available until Git " + myTitle + " is finished.";
|
||||
|
||||
myGeneralSettings = GeneralSettings.getInstance();
|
||||
myProjectManager = ProjectManagerEx.getInstanceEx();
|
||||
myRepositoryManager = GitRepositoryManager.getInstance(project);
|
||||
myChangeListManager = ChangeListManager.getInstance(myProject);
|
||||
|
||||
mySaveOnFrameDeactivation = myGeneralSettings.isSaveOnFrameDeactivation();
|
||||
mySyncOnFrameDeactivation = myGeneralSettings.isSyncOnFrameActivation();
|
||||
|
||||
// define tasks that need information from constructor
|
||||
|
||||
FREEZE = new TaskDescriptor(myTitle, Where.POOLED) {
|
||||
|
||||
Reference in New Issue
Block a user