diff --git a/platform/diff-impl/resources/META-INF/diff-impl.xml b/platform/diff-impl/resources/META-INF/diff-impl.xml
index 5efc5513cf6f..23efadeadc0e 100644
--- a/platform/diff-impl/resources/META-INF/diff-impl.xml
+++ b/platform/diff-impl/resources/META-INF/diff-impl.xml
@@ -14,6 +14,8 @@
order="before hide-hints"/>
+
+
diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNavigationActionPromoter.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNavigationActionPromoter.kt
new file mode 100644
index 000000000000..d2ad3398588f
--- /dev/null
+++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNavigationActionPromoter.kt
@@ -0,0 +1,27 @@
+// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
+package com.intellij.diff.actions.impl
+
+import com.intellij.diff.tools.util.DiffDataKeys
+import com.intellij.openapi.actionSystem.ActionPromoter
+import com.intellij.openapi.actionSystem.AnAction
+import com.intellij.openapi.actionSystem.DataContext
+
+/**
+ * When iterating over diff, iteration actions take precedence over anything else
+ */
+internal class DiffNavigationActionPromoter : ActionPromoter {
+ override fun suppress(actions: List, context: DataContext): List {
+ if (context.getData(DiffDataKeys.PREV_NEXT_FILE_ITERABLE) != null && actions.any(::isFileNavigationAction)) {
+ return actions.filterNot(::isFileNavigationAction)
+ }
+
+ if (context.getData(DiffDataKeys.PREV_NEXT_DIFFERENCE_ITERABLE) != null && actions.any(::isDifferenceNavigationAction)) {
+ return actions.filterNot(::isDifferenceNavigationAction)
+ }
+ return emptyList()
+ }
+}
+
+private fun isFileNavigationAction(action: AnAction) = action is DiffNextFileAction || action is DiffPreviousFileAction
+
+private fun isDifferenceNavigationAction(action: AnAction) = action is DiffNextDifferenceAction || action is DiffPreviousDifferenceAction
\ No newline at end of file
diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextDifferenceAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextDifferenceAction.kt
index f96fbb01b05c..7a276d1f86fa 100644
--- a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextDifferenceAction.kt
+++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextDifferenceAction.kt
@@ -2,7 +2,6 @@
package com.intellij.diff.actions.impl
import com.intellij.diff.tools.util.DiffDataKeys
-import com.intellij.diff.util.DiffUtil
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -12,14 +11,13 @@ internal open class DiffNextDifferenceAction : AnAction(), DumbAware {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.EDT
override fun update(e: AnActionEvent) {
- if (DiffUtil.isFromShortcut(e)) {
- e.presentation.setEnabledAndVisible(true)
+ val iterable = e.getData(DiffDataKeys.PREV_NEXT_DIFFERENCE_ITERABLE)
+ if (iterable == null) {
+ e.presentation.setEnabledAndVisible(false)
return
}
-
- val iterable = e.getData(DiffDataKeys.PREV_NEXT_DIFFERENCE_ITERABLE)
- if (iterable != null && iterable.canGoNext()) {
- e.presentation.setEnabled(true)
+ else if (iterable.canGoNext()) {
+ e.presentation.setEnabledAndVisible(true)
return
}
diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextFileAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextFileAction.kt
index 61ed0badb4e4..fa55e1502d8c 100644
--- a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextFileAction.kt
+++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffNextFileAction.kt
@@ -2,7 +2,6 @@
package com.intellij.diff.actions.impl
import com.intellij.diff.tools.util.DiffDataKeys
-import com.intellij.diff.util.DiffUtil
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -12,11 +11,6 @@ internal open class DiffNextFileAction : AnAction(), DumbAware {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
override fun update(e: AnActionEvent) {
- if (DiffUtil.isFromShortcut(e)) {
- e.presentation.setEnabledAndVisible(true)
- return
- }
-
val iterable = e.getData(DiffDataKeys.PREV_NEXT_FILE_ITERABLE)
if (iterable == null) {
e.presentation.setEnabledAndVisible(false)
diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousDifferenceAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousDifferenceAction.kt
index 2b8ff690b0f1..4e223475b9f4 100644
--- a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousDifferenceAction.kt
+++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousDifferenceAction.kt
@@ -2,7 +2,6 @@
package com.intellij.diff.actions.impl
import com.intellij.diff.tools.util.DiffDataKeys
-import com.intellij.diff.util.DiffUtil
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -12,14 +11,13 @@ internal open class DiffPreviousDifferenceAction : AnAction(), DumbAware {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.EDT
override fun update(e: AnActionEvent) {
- if (DiffUtil.isFromShortcut(e)) {
- e.presentation.setEnabledAndVisible(true)
+ val iterable = e.getData(DiffDataKeys.PREV_NEXT_DIFFERENCE_ITERABLE)
+ if (iterable == null) {
+ e.presentation.setEnabledAndVisible(false)
return
}
-
- val iterable = e.getData(DiffDataKeys.PREV_NEXT_DIFFERENCE_ITERABLE)
- if (iterable != null && iterable.canGoPrev()) {
- e.presentation.setEnabled(true)
+ else if (iterable.canGoPrev()) {
+ e.presentation.setEnabledAndVisible(true)
return
}
diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousFileAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousFileAction.kt
index 7869741eb06e..c77b296a152c 100644
--- a/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousFileAction.kt
+++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/DiffPreviousFileAction.kt
@@ -2,7 +2,6 @@
package com.intellij.diff.actions.impl
import com.intellij.diff.tools.util.DiffDataKeys
-import com.intellij.diff.util.DiffUtil
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
@@ -12,11 +11,6 @@ internal class DiffPreviousFileAction : AnAction(), DumbAware {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
override fun update(e: AnActionEvent) {
- if (DiffUtil.isFromShortcut(e)) {
- e.presentation.setEnabledAndVisible(true)
- return
- }
-
val iterable = e.getData(DiffDataKeys.PREV_NEXT_FILE_ITERABLE)
if (iterable == null) {
e.presentation.setEnabledAndVisible(false)