diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt index 0367678282c4..ebe74e8e23c9 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/changes/CodeReviewChangeListComponentFactory.kt @@ -88,7 +88,10 @@ object CodeReviewChangeListComponentFactory { } is CodeReviewChangeListViewModel.SelectionRequest.OneChange -> { invokeAfterRefresh { - setSelectedChanges(listOf(request.change)) + val currentSelection = selected(this).iterateUserObjects(RefComparisonChange::class.java) + if (request.change !in currentSelection) { + setSelectedChanges(listOf(request.change)) + } addTreeSelectionListener(selectionListener) } } @@ -151,22 +154,21 @@ private class Node(change: RefComparisonChange) : AbstractChangesBrowserFilePath private fun CodeReviewChangeListViewModel.updateSelectedChangesFromTree(tree: AsyncChangesTree) { var fuzzy = false - val changes = mutableListOf() + val selectedChanges = mutableListOf() selected(tree).iterateRawNodes().forEach { if (it.isLeaf) { val change = it.userObject as? RefComparisonChange - changes.add(change!!) + selectedChanges.add(change!!) } else { fuzzy = true } } - val selection = if (changes.isEmpty()) null - else if (fuzzy) { - ChangesSelection.Fuzzy(changes) - } - else { - ChangesSelection.Precise(this.changes, changes[0]) + val selection = when { + selectedChanges.isEmpty() -> null + fuzzy -> ChangesSelection.Fuzzy(selectedChanges) + selectedChanges.size == 1 -> ChangesSelection.Precise(changes, selectedChanges[0]) + else -> ChangesSelection.Precise(selectedChanges, selectedChanges[0]) } updateSelectedChanges(selection) } \ No newline at end of file