diff --git a/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt b/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt index 67b121f49270..0ebd836e5acd 100644 --- a/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt +++ b/platform/configuration-store-impl/src/SaveAndSyncHandlerImpl.kt @@ -128,6 +128,7 @@ internal class SaveAndSyncHandlerImpl : BaseSaveAndSyncHandler(), Disposable { val busConnection = ApplicationManager.getApplication().messageBus.connect(this) busConnection.subscribe(FrameStateListener.TOPIC, object : FrameStateListener { override fun onFrameDeactivated() { + externalChangesModificationTracker.incModificationCount() if (!settings.isSaveOnFrameDeactivation || !canSyncOrSave()) { return } @@ -254,6 +255,7 @@ internal class SaveAndSyncHandlerImpl : BaseSaveAndSyncHandler(), Disposable { } override fun scheduleRefresh() { + externalChangesModificationTracker.incModificationCount() refreshDelayAlarm.cancelAndRequest() } diff --git a/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt b/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt index c1c7dafc48ed..0df2e909aabb 100644 --- a/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt +++ b/platform/platform-api/src/com/intellij/ide/SaveAndSyncHandler.kt @@ -7,6 +7,8 @@ import com.intellij.openapi.application.ModalityState import com.intellij.openapi.components.ComponentManager import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.project.Project +import com.intellij.openapi.util.ModificationTracker +import com.intellij.openapi.util.SimpleModificationTracker import org.jetbrains.annotations.ApiStatus abstract class SaveAndSyncHandler { @@ -17,6 +19,8 @@ abstract class SaveAndSyncHandler { } } + protected val externalChangesModificationTracker = SimpleModificationTracker() + /** * Schedule to save documents, all opened projects (or only passed project if not null) and application. * @@ -74,4 +78,11 @@ abstract class SaveAndSyncHandler { @ApiStatus.Experimental abstract fun saveSettingsUnderModalProgress(componentManager: ComponentManager): Boolean + + /** + * @return a modification tracker incrementing when external commands are likely run. + * Currently it happens on IDE frame deactivation and/or [scheduleRefresh] invocation. + */ + @ApiStatus.Experimental + fun getExternalChangesTracker(): ModificationTracker = externalChangesModificationTracker }