diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FileFilterModel.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FileFilterModel.kt index f2dc5ef22572..2848a4e9043b 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FileFilterModel.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FileFilterModel.kt @@ -52,8 +52,8 @@ class FileFilterModel(val roots: Set, uiProperties: MainVcsLogUiPro } } - var rootFilter by filterProperty(VcsLogFilterCollection.ROOT_FILTER) - var structureFilter by filterProperty(VcsLogFilterCollection.STRUCTURE_FILTER) + var rootFilter by filterProperty(VcsLogFilterCollection.ROOT_FILTER, exclusive = true) + var structureFilter by filterProperty(VcsLogFilterCollection.STRUCTURE_FILTER, exclusive = true) companion object { private const val DIR: @NonNls String = "dir:" diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.kt index b73024158795..6e2b7ae05c81 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/FilterModel.kt @@ -6,6 +6,7 @@ import com.intellij.vcs.log.VcsLogFilterCollection import com.intellij.vcs.log.impl.MainVcsLogUiProperties import com.intellij.vcs.log.statistics.VcsLogUsageTriggerCollector import com.intellij.vcs.log.visible.filters.VcsLogFilterObject +import com.intellij.vcs.log.visible.filters.with import com.intellij.vcs.log.visible.filters.without import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty @@ -126,11 +127,21 @@ abstract class FilterModel internal constructor(@JvmField protected val protected abstract fun getFilterValues(filter: VcsLogFilter): List? protected abstract fun createFilter(key: VcsLogFilterCollection.FilterKey<*>, values: List): VcsLogFilter? - protected fun filterProperty(key: VcsLogFilterCollection.FilterKey): ReadWriteProperty { + protected fun filterProperty(key: VcsLogFilterCollection.FilterKey, exclusive: Boolean = false): ReadWriteProperty { return object : ReadWriteProperty { override fun getValue(thisRef: MultipleFilterModel, property: KProperty<*>): F? = thisRef.getFilter(key) override fun setValue(thisRef: MultipleFilterModel, property: KProperty<*>, value: F?) { - setFilter(if (value == null) getFilter()?.without(key) else VcsLogFilterObject.collection(value)) + val oldFilter = getFilter() + val newFilter = if (value == null) { + oldFilter?.without(key) + } + else if (exclusive || oldFilter == null) { + VcsLogFilterObject.collection(value) + } + else { + oldFilter.with(value) + } + setFilter(newFilter) } } }