IJPL-177947 Validation errors do not disappear on segmented buttons after value set

(cherry picked from commit a6794f2eaebf4045e94f160fc8003e439f412a6e)


(cherry picked from commit f9879e36bcb88198ad4bd46166bea933e3e86f41)

IJ-MR-155667

GitOrigin-RevId: 7056b94f8a56edaf8822981e7e8225a3c582926d
This commit is contained in:
Yuriy Artamonov
2025-02-20 21:08:46 +01:00
committed by intellij-monorepo-bot
parent ccbbb17dd8
commit 1bb53c5e92
2 changed files with 19 additions and 3 deletions

View File

@@ -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) }
}

View File

@@ -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<T : JComponent>(
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
}
}