diff --git a/platform/platform-api/src/com/intellij/openapi/observable/util/ListenerUiUtil.kt b/platform/platform-api/src/com/intellij/openapi/observable/util/ListenerUiUtil.kt index 40213685fed0..6718dea456fe 100644 --- a/platform/platform-api/src/com/intellij/openapi/observable/util/ListenerUiUtil.kt +++ b/platform/platform-api/src/com/intellij/openapi/observable/util/ListenerUiUtil.kt @@ -11,11 +11,13 @@ import com.intellij.ui.DocumentAdapter import com.intellij.ui.EditorTextComponent import com.intellij.ui.PopupMenuListenerAdapter import com.intellij.ui.SearchTextField +import com.intellij.ui.UserActivityProviderComponent import com.intellij.ui.components.DropDownLink import com.intellij.ui.hover.HoverListener import com.intellij.ui.table.TableView import com.intellij.util.ui.TableViewModel import com.intellij.util.ui.tree.TreeModelAdapter +import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.ApiStatus.Experimental import java.awt.Component import java.awt.Dimension @@ -254,3 +256,9 @@ fun JCheckBox.whenStateChangedFromUi(parentDisposable: Disposable? = null, liste } } } + +@ApiStatus.Internal +fun UserActivityProviderComponent.whenChanged(parentDisposable: Disposable? = null, listener: ChangeListener) { + addChangeListener(listener) + parentDisposable?.whenDisposed { removeChangeListener(listener) } +} diff --git a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/CellImpl.kt b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/CellImpl.kt index 38052f225885..2eed82ff1871 100644 --- a/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/CellImpl.kt +++ b/platform/platform-impl/src/com/intellij/ui/dsl/builder/impl/CellImpl.kt @@ -4,19 +4,22 @@ package com.intellij.ui.dsl.builder.impl import com.intellij.openapi.Disposable import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.observable.properties.ObservableProperty -import com.intellij.openapi.ui.* +import com.intellij.openapi.observable.util.whenChanged +import com.intellij.openapi.ui.ValidationInfo import com.intellij.openapi.ui.validation.* import com.intellij.openapi.util.NlsContexts import com.intellij.openapi.util.NlsSafe import com.intellij.ui.DocumentAdapter import com.intellij.ui.EditorTextField +import com.intellij.ui.UserActivityProviderComponent import com.intellij.ui.dsl.UiDslException import com.intellij.ui.dsl.builder.* -import com.intellij.ui.dsl.builder.Cell import com.intellij.ui.dsl.builder.components.DslLabel import com.intellij.ui.dsl.gridLayout.* import com.intellij.ui.dsl.validation.CellValidation -import com.intellij.ui.layout.* +import com.intellij.ui.layout.ComponentPredicate +import com.intellij.ui.layout.PropertyBinding +import com.intellij.ui.layout.ValidationInfoBuilder import com.intellij.util.containers.map2Array import com.intellij.util.ui.JBFont import org.jetbrains.annotations.ApiStatus @@ -354,6 +357,11 @@ internal class CellImpl( is JTextComponent -> WHEN_TEXT_CHANGED(component) is ItemSelectable -> WHEN_STATE_CHANGED(component) is EditorTextField -> WHEN_DOCUMENT_CHANGED(component) + is UserActivityProviderComponent -> { + DialogValidationRequestor { parentDisposable, validate -> + component.whenChanged(parentDisposable) { validate() } + } + } else -> null } }