diff --git a/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java b/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java index 0d5d095d68ea..6789f5794fbf 100644 --- a/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java +++ b/platform/diff-api/src/com/intellij/diff/util/DiffUserDataKeys.java @@ -134,4 +134,20 @@ public interface DiffUserDataKeys { * @see com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings#isEnableAligningChangesMode */ Key ALIGNED_TWO_SIDED_DIFF = Key.create("Diff.AlignTwoSidedDiff"); + + /** + * Controls whether the aligning view mode is available for a specific editor. + * This can be disabled for viewers, where this feature is not implemented (e.g. {@link com.intellij.jupyter.diff.util.JupyterDiffViewer}) + * + * @see com.intellij.diff.actions.impl.ToggleDiffAligningModeAction#update + */ + Key ALIGNING_VIEW_NOT_SUPPORTED = Key.create("Diff.DisableAligningView"); + + /** + * Determines if line markers should always be visible in the editor gutter, regardless of the current folding state. + * This can be particularly useful in specialized diff viewers (e.g., {@link com.intellij.jupyter.diff.util.JupyterDiffViewer}) + * + * @see com.intellij.openapi.editor.impl.EditorGutterComponentImpl#isLineMarkerVisible + */ + Key LINE_MARKER_ALWAYS_VISIBLE = Key.create("Diff.LineMarkerAlwaysVisible"); } diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt index ba38bf1c0fd6..38fc3ab3b535 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt +++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/ToggleDiffAligningModeAction.kt @@ -6,6 +6,7 @@ import com.intellij.diff.tools.util.DiffDataKeys.DIFF_CONTEXT import com.intellij.diff.tools.util.DiffDataKeys.DIFF_VIEWER import com.intellij.diff.tools.util.base.TextDiffViewerUtil import com.intellij.diff.util.DiffUserDataKeys.ALIGNED_TWO_SIDED_DIFF +import com.intellij.diff.util.DiffUserDataKeys.ALIGNING_VIEW_NOT_SUPPORTED import com.intellij.diff.util.DiffUtil import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnActionEvent @@ -18,6 +19,7 @@ class ToggleDiffAligningModeAction : DumbAwareToggleAction() { val available = e.project != null && viewer is SimpleDiffViewer && !DiffUtil.isUserDataFlagSet(ALIGNED_TWO_SIDED_DIFF, viewer.request) + && !DiffUtil.isUserDataFlagSet(ALIGNING_VIEW_NOT_SUPPORTED, viewer.request) if (!available) { e.presentation.isEnabledAndVisible = false return diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index f573a5dbe9ce..7077fbf5eb60 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -115,6 +115,7 @@ import java.util.concurrent.Callable; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import static com.intellij.diff.util.DiffUserDataKeys.LINE_MARKER_ALWAYS_VISIBLE; import static com.intellij.openapi.ui.ex.lineNumber.LineNumberConvertersKt.getStandardLineNumberConverter; /** @@ -1299,9 +1300,9 @@ final class EditorGutterComponentImpl extends EditorGutterComponentEx implements } private boolean isLineMarkerVisible(RangeHighlighter highlighter) { + if (Boolean.TRUE.equals(myEditor.getUserData(LINE_MARKER_ALWAYS_VISIBLE))) { return true; } int startOffset = highlighter.getStartOffset(); int endOffset = highlighter.getEndOffset(); - FoldRegion startFoldRegion = myEditor.getFoldingModel().getCollapsedRegionAtOffset(startOffset); FoldRegion endFoldRegion = myEditor.getFoldingModel().getCollapsedRegionAtOffset(endOffset); return startFoldRegion == null || !startFoldRegion.equals(endFoldRegion);