diff: do not close all split-mode editors for DiffVirtualFile when one editor is closed

This commit is contained in:
Aleksey Pivovarov
2019-02-20 15:13:49 +03:00
parent b4e6ecac2e
commit d172cd801c
2 changed files with 17 additions and 8 deletions
@@ -31,13 +31,13 @@ class DiffEditorProvider : AsyncFileEditorProvider, DumbAware {
override fun createEditorAsync(project: Project, file: VirtualFile): AsyncFileEditorProvider.Builder {
val builder = (file as DiffVirtualFile).createProcessorAsync(project)
return object : AsyncFileEditorProvider.Builder() {
override fun build() = DiffRequestProcessorEditor(project, file, builder.build())
override fun build() = DiffRequestProcessorEditor(file, builder.build())
}
}
override fun createEditor(project: Project, file: VirtualFile): FileEditor {
val builder = (file as DiffVirtualFile).createProcessorAsync(project)
return DiffRequestProcessorEditor(project, file, builder.build())
return DiffRequestProcessorEditor(file, builder.build())
}
override fun disposeEditor(editor: FileEditor) {
@@ -18,26 +18,30 @@ package com.intellij.diff.editor
import com.intellij.codeHighlighting.BackgroundEditorHighlighter
import com.intellij.diff.impl.DiffRequestProcessor
import com.intellij.openapi.Disposable
import com.intellij.openapi.fileEditor.*
import com.intellij.openapi.fileEditor.FileEditor
import com.intellij.openapi.fileEditor.FileEditorLocation
import com.intellij.openapi.fileEditor.FileEditorState
import com.intellij.openapi.fileEditor.FileEditorStateLevel
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.UserDataHolderBase
import com.intellij.openapi.vfs.VirtualFile
import java.beans.PropertyChangeListener
import java.beans.PropertyChangeSupport
import javax.swing.JComponent
class DiffRequestProcessorEditor(
private val project: Project,
private val file: DiffVirtualFile,
private val processor: DiffRequestProcessor
) : UserDataHolderBase(), FileEditor {
private val propertyChangeSupport = PropertyChangeSupport(this)
init {
Disposer.register(this, Disposable {
Disposer.dispose(processor)
})
Disposer.register(processor, Disposable {
FileEditorManager.getInstance(project).closeFile(file)
propertyChangeSupport.firePropertyChange(FileEditor.PROP_VALID, true, false)
})
}
@@ -54,6 +58,14 @@ class DiffRequestProcessorEditor(
override fun deselectNotify() {}
override fun addPropertyChangeListener(listener: PropertyChangeListener) {
propertyChangeSupport.addPropertyChangeListener(listener)
}
override fun removePropertyChangeListener(listener: PropertyChangeListener) {
propertyChangeSupport.removePropertyChangeListener(listener)
}
//
// Unused
//
@@ -63,9 +75,6 @@ class DiffRequestProcessorEditor(
override fun setState(state: FileEditorState) {}
override fun isModified(): Boolean = false
override fun addPropertyChangeListener(listener: PropertyChangeListener) {}
override fun removePropertyChangeListener(listener: PropertyChangeListener) {}
override fun getBackgroundHighlighter(): BackgroundEditorHighlighter? = null
override fun getCurrentLocation(): FileEditorLocation? = null
}