From 51d5167d1bb4be65aa10a3b350ecb9688b42edb5 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 8 May 2024 14:39:21 +0200 Subject: [PATCH] IJPL-149459 IDEA-346408 diff: avoid re-implementing the ToggleAction icon 'isMultiChoice' flag can now be explicitly disabled. GitOrigin-RevId: 9d9b583196cb235e3cb0be241741dc2792529e7b --- .../resources/api-dump-unreviewed.txt | 6 --- .../actions/impl/CombinedDiffToggleAction.kt | 43 ++++++------------- 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/platform/diff-impl/resources/api-dump-unreviewed.txt b/platform/diff-impl/resources/api-dump-unreviewed.txt index 0bf713ef4ac2..7349b536377a 100644 --- a/platform/diff-impl/resources/api-dump-unreviewed.txt +++ b/platform/diff-impl/resources/api-dump-unreviewed.txt @@ -261,12 +261,6 @@ f:com.intellij.diff.actions.ShowStandaloneDiffAction - sf:getEP_NAME():com.intellij.openapi.extensions.ExtensionPointName f:com.intellij.diff.actions.ShowStandaloneDiffAction$Companion - f:getEP_NAME():com.intellij.openapi.extensions.ExtensionPointName -f:com.intellij.diff.actions.impl.CombinedDiffToggleAction -- com.intellij.openapi.project.DumbAwareAction -- ():V -- actionPerformed(com.intellij.openapi.actionSystem.AnActionEvent):V -- getActionUpdateThread():com.intellij.openapi.actionSystem.ActionUpdateThread -- update(com.intellij.openapi.actionSystem.AnActionEvent):V c:com.intellij.diff.actions.impl.DiffNavigatableArrayRule - com.intellij.ide.impl.dataRules.GetDataRule - ():V diff --git a/platform/diff-impl/src/com/intellij/diff/actions/impl/CombinedDiffToggleAction.kt b/platform/diff-impl/src/com/intellij/diff/actions/impl/CombinedDiffToggleAction.kt index fcc9aa3ff69d..222c7365873a 100644 --- a/platform/diff-impl/src/com/intellij/diff/actions/impl/CombinedDiffToggleAction.kt +++ b/platform/diff-impl/src/com/intellij/diff/actions/impl/CombinedDiffToggleAction.kt @@ -8,47 +8,30 @@ import com.intellij.diff.util.DiffUserDataKeysEx import com.intellij.icons.AllIcons import com.intellij.openapi.actionSystem.ActionUpdateThread import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.ToggleAction import com.intellij.openapi.actionSystem.impl.ActionMenu -import com.intellij.openapi.actionSystem.impl.ActionMenu.Companion.shouldConvertIconToDarkVariant -import com.intellij.openapi.project.DumbAwareAction -import com.intellij.openapi.util.IconLoader -import com.intellij.util.ui.LafIconLookup +import com.intellij.openapi.project.DumbAware -class CombinedDiffToggleAction : DumbAwareAction() { +internal class CombinedDiffToggleAction : ToggleAction(), DumbAware { override fun update(e: AnActionEvent) { super.update(e) val diffModeToggle = getDiffModeToggle(e) e.presentation.isEnabledAndVisible = diffModeToggle != null - e.presentation.putClientProperty(ActionMenu.SECONDARY_ICON, null) + e.presentation.isMultiChoice = false - diffModeToggle ?: return - - if (diffModeToggle.isCombinedDiffEnabled) { - // It impossible to use ToggleAction here because it doesn't close the popup menu - // Temporary solution is to add checkmark icon on AnAction - // - var checkmark = LafIconLookup.getIcon("checkmark") - var selectedCheckmark = LafIconLookup.getSelectedIcon("checkmark") - if (shouldConvertIconToDarkVariant()) { - checkmark = IconLoader.getDarkIcon(checkmark, true) - selectedCheckmark = IconLoader.getDarkIcon(selectedCheckmark, true) - } - e.presentation.icon = checkmark - e.presentation.selectedIcon = selectedCheckmark - } - else { - e.presentation.icon = null - e.presentation.selectedIcon = null - if (CombinedDiffRegistry.showBadge()) { - e.presentation.putClientProperty(ActionMenu.SECONDARY_ICON, AllIcons.General.New_badge) - } - } + val needNewBadge = diffModeToggle != null && !diffModeToggle.isCombinedDiffEnabled && CombinedDiffRegistry.showBadge() + e.presentation.putClientProperty(ActionMenu.SECONDARY_ICON, if (needNewBadge) AllIcons.General.New_badge else null) } - override fun actionPerformed(e: AnActionEvent) { + override fun isSelected(e: AnActionEvent): Boolean { + val diffModeToggle = getDiffModeToggle(e) ?: return false + return diffModeToggle.isCombinedDiffEnabled + } + + override fun setSelected(e: AnActionEvent, state: Boolean) { val diffModeToggle = getDiffModeToggle(e) ?: return - diffModeToggle.isCombinedDiffEnabled = !diffModeToggle.isCombinedDiffEnabled + diffModeToggle.isCombinedDiffEnabled = state } override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT