IJPL-187180 vcs: Automatically close the commit tool window after commit in window/float mode

(cherry picked from commit e45f9bfccfd77d38a4bb26630aacb69fcb8aee0d)

IJ-MR-163526

GitOrigin-RevId: 8c76c28621310bb5ece25dcd117bcde537fae54d
This commit is contained in:
Aleksandr Krasilnikov
2025-06-10 11:57:20 +00:00
committed by intellij-monorepo-bot
parent ede0aef024
commit 2da2caf3db
2 changed files with 26 additions and 0 deletions
@@ -22,6 +22,7 @@ import com.intellij.ui.content.ContentManagerEvent
import com.intellij.ui.content.ContentManagerListener
import com.intellij.util.IJSwingUtilities
import com.intellij.util.ObjectUtils.tryCast
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.intellij.util.messages.MessageBusConnection
import com.intellij.vcs.commit.CommitMode
import com.intellij.vcs.commit.CommitModeManager
@@ -367,3 +368,26 @@ fun MessageBusConnection.subscribeOnVcsToolWindowLayoutChanges(updateLayout: Run
override fun stateChanged(toolWindowManager: ToolWindowManager) = updateLayout.run()
})
}
/**
* Hides windowed/floating Commit TW when the commit started. Only for default non-modal commit mode
*/
@RequiresEdt
internal fun hideWindowedFloatingTwOnCommit(project: Project) {
val commitTw = getCommitToolWindow(project) ?: return
if (!commitTw.isActive || !commitTw.isVisible) return
val commitTwType = commitTw.type
if (commitTwType.isInWindow()) {
commitTw.hide()
}
}
private fun ToolWindowType.isInWindow(): Boolean {
return this == ToolWindowType.WINDOWED || this == ToolWindowType.FLOATING
}
private fun getCommitToolWindow(project: Project): ToolWindow? {
return ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.COMMIT)
}
@@ -33,6 +33,7 @@ import com.intellij.openapi.vcs.changes.CommitExecutor
import com.intellij.openapi.vcs.changes.actions.DefaultCommitExecutorAction
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager
import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager.Companion.LOCAL_CHANGES
import com.intellij.openapi.vcs.changes.ui.hideWindowedFloatingTwOnCommit
import com.intellij.openapi.vcs.checkin.*
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
@@ -300,6 +301,7 @@ abstract class NonModalCommitWorkflowHandler<W : NonModalCommitWorkflow, U : Non
@ApiStatus.Internal
override suspend fun doExecuteSession(sessionInfo: CommitSessionInfo, commitInfo: DynamicCommitInfo): Boolean {
hideWindowedFloatingTwOnCommit(project)
if (!sessionInfo.isVcsCommit) {
return workflow.executeSession(sessionInfo, commitInfo)
}