mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diff: fix "Show All Files in One Diff View" not working for VCS Log preview
GitOrigin-RevId: 8639ee150dae3d7bb2f5cc1a6b7e42a47790499e
This commit is contained in:
committed by
intellij-monorepo-bot
parent
2cd6fbda37
commit
829620e5c5
@@ -100,6 +100,7 @@ f:com.intellij.diff.tools.combined.CombinedDiffKeysKt
|
||||
- a:goPrevDiff():V
|
||||
*f:com.intellij.diff.tools.combined.CombinedDiffRegistry
|
||||
- sf:INSTANCE:com.intellij.diff.tools.combined.CombinedDiffRegistry
|
||||
- f:addStateListener(java.lang.Runnable,com.intellij.openapi.Disposable):V
|
||||
- f:getFilesLimit():I
|
||||
- f:getMaxBlockCountInMemory():I
|
||||
- f:getPreloadedBlocksCount():I
|
||||
|
||||
@@ -4,6 +4,8 @@ package com.intellij.diff.tools.combined
|
||||
import com.intellij.diff.editor.DiffEditorViewerFileEditor.Companion.reloadDiffEditorsForFiles
|
||||
import com.intellij.diff.editor.DiffViewerVirtualFile
|
||||
import com.intellij.idea.AppMode
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.options.advanced.AdvancedSettings
|
||||
import com.intellij.openapi.options.advanced.AdvancedSettingsChangeListener
|
||||
import com.intellij.openapi.project.ProjectManager
|
||||
@@ -27,6 +29,17 @@ object CombinedDiffRegistry {
|
||||
fun getMaxBlockCountInMemory(): Int = Registry.intValue("combined.diff.loaded.content.limit")
|
||||
|
||||
fun getFilesLimit(): Int = Registry.intValue("combined.diff.files.limit")
|
||||
|
||||
fun addStateListener(onEnabledChange: Runnable, disposable: Disposable) {
|
||||
ApplicationManager.getApplication().messageBus.connect(disposable)
|
||||
.subscribe(AdvancedSettingsChangeListener.TOPIC, object : AdvancedSettingsChangeListener {
|
||||
override fun advancedSettingChanged(id: String, oldValue: Any, newValue: Any) {
|
||||
if (id == COMBINED_DIFF_SETTING_ID) {
|
||||
onEnabledChange.run()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
internal class CombinedDiffAdvancedSettingsChangeListener : AdvancedSettingsChangeListener {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
package com.intellij.vcs.log.ui.frame
|
||||
|
||||
import com.intellij.diff.impl.DiffEditorViewer
|
||||
import com.intellij.diff.tools.combined.CombinedDiffRegistry
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.actionSystem.ActionToolbar
|
||||
import com.intellij.openapi.application.invokeLater
|
||||
@@ -17,11 +18,13 @@ import org.jetbrains.annotations.NonNls
|
||||
import javax.swing.JComponent
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
internal abstract class FrameDiffPreview(uiProperties: VcsLogUiProperties,
|
||||
mainComponent: JComponent,
|
||||
@NonNls splitterProportionKey: String,
|
||||
defaultProportion: Float = 0.7f,
|
||||
parentDisposable: Disposable) : Disposable {
|
||||
internal abstract class FrameDiffPreview(
|
||||
val uiProperties: VcsLogUiProperties,
|
||||
mainComponent: JComponent,
|
||||
@NonNls splitterProportionKey: String,
|
||||
defaultProportion: Float = 0.7f,
|
||||
parentDisposable: Disposable,
|
||||
) : Disposable {
|
||||
private val previewDiffSplitter: Splitter = OnePixelSplitter(uiProperties[MainVcsLogUiProperties.DIFF_PREVIEW_VERTICAL_SPLIT],
|
||||
splitterProportionKey, defaultProportion)
|
||||
|
||||
@@ -35,14 +38,15 @@ internal abstract class FrameDiffPreview(uiProperties: VcsLogUiProperties,
|
||||
|
||||
uiProperties.onPropertyChange(this) { p ->
|
||||
if (CommonUiProperties.SHOW_DIFF_PREVIEW == p) {
|
||||
showDiffPreview(uiProperties[CommonUiProperties.SHOW_DIFF_PREVIEW])
|
||||
updateDiffPreviewState()
|
||||
}
|
||||
else if (MainVcsLogUiProperties.DIFF_PREVIEW_VERTICAL_SPLIT == p) {
|
||||
changeDiffPreviewOrientation(uiProperties[MainVcsLogUiProperties.DIFF_PREVIEW_VERTICAL_SPLIT])
|
||||
}
|
||||
}
|
||||
invokeLater { showDiffPreview(uiProperties[CommonUiProperties.SHOW_DIFF_PREVIEW]) }
|
||||
CombinedDiffRegistry.addStateListener({ updateDiffPreviewState(forceRecreate = true) }, this)
|
||||
|
||||
invokeLater { updateDiffPreviewState() }
|
||||
Disposer.register(parentDisposable, this)
|
||||
}
|
||||
|
||||
@@ -59,13 +63,20 @@ internal abstract class FrameDiffPreview(uiProperties: VcsLogUiProperties,
|
||||
return diffViewer?.preferredFocusedComponent
|
||||
}
|
||||
|
||||
private fun showDiffPreview(state: Boolean) {
|
||||
private fun updateDiffPreviewState(forceRecreate: Boolean = false) {
|
||||
if (isDisposed) return
|
||||
val shouldBeShown = uiProperties[CommonUiProperties.SHOW_DIFF_PREVIEW]
|
||||
|
||||
val isShown = diffViewer != null
|
||||
if (state == isShown) return
|
||||
if (!forceRecreate && shouldBeShown == isShown) return
|
||||
|
||||
if (state) {
|
||||
if (diffViewer != null) {
|
||||
previewDiffSplitter.secondComponent = null
|
||||
Disposer.dispose(diffViewer!!.disposable)
|
||||
diffViewer = null
|
||||
}
|
||||
|
||||
if (shouldBeShown) {
|
||||
val newDiffViewer = createViewer()
|
||||
val component = newDiffViewer.component
|
||||
previewDiffSplitter.secondComponent = component
|
||||
@@ -75,11 +86,6 @@ internal abstract class FrameDiffPreview(uiProperties: VcsLogUiProperties,
|
||||
defaultMinimumSize.height.coerceAtMost((actionButtonSize.height * 1.5f).roundToInt()))
|
||||
diffViewer = newDiffViewer
|
||||
}
|
||||
else {
|
||||
previewDiffSplitter.secondComponent = null
|
||||
Disposer.dispose(diffViewer!!.disposable)
|
||||
diffViewer = null
|
||||
}
|
||||
}
|
||||
|
||||
private fun changeDiffPreviewOrientation(bottom: Boolean) {
|
||||
|
||||
Reference in New Issue
Block a user