@@ -2,6 +2,7 @@ package org.wavescale.sourcesync.ui
22
33import com.intellij.CommonBundle
44import com.intellij.icons.AllIcons
5+ import com.intellij.openapi.application.EDT
56import com.intellij.openapi.components.service
67import com.intellij.openapi.project.Project
78import com.intellij.openapi.ui.DialogWrapper
@@ -17,16 +18,6 @@ import com.intellij.ui.util.minimumWidth
1718import com.intellij.ui.util.preferredWidth
1819import com.intellij.util.ui.JBUI
1920import com.intellij.util.ui.tree.TreeUtil
20- import org.wavescale.sourcesync.SourcesyncBundle
21- import org.wavescale.sourcesync.configurations.ScpSyncConfiguration
22- import org.wavescale.sourcesync.configurations.SshSyncConfiguration
23- import org.wavescale.sourcesync.configurations.SyncConfigurationType
24- import org.wavescale.sourcesync.configurations.SyncConfigurationType.SCP
25- import org.wavescale.sourcesync.configurations.SyncConfigurationType.SFTP
26- import org.wavescale.sourcesync.services.SyncRemoteConfigurationsService
27- import org.wavescale.sourcesync.ui.tree.SyncConfigurationTreeRenderer
28- import org.wavescale.sourcesync.ui.tree.SyncConnectionsTree
29- import org.wavescale.sourcesync.ui.tree.SyncConnectionsTreeModel
3021import java.awt.BorderLayout
3122import java.awt.event.ActionEvent
3223import java.awt.event.KeyEvent
@@ -40,8 +31,23 @@ import javax.swing.tree.DefaultMutableTreeNode
4031import javax.swing.tree.TreeNode
4132import javax.swing.tree.TreeSelectionModel
4233import kotlin.math.max
34+ import kotlinx.coroutines.CoroutineScope
35+ import kotlinx.coroutines.Dispatchers
36+ import kotlinx.coroutines.launch
37+ import kotlinx.coroutines.withContext
38+ import org.wavescale.sourcesync.SourcesyncBundle
39+ import org.wavescale.sourcesync.configurations.ScpSyncConfiguration
40+ import org.wavescale.sourcesync.configurations.SshSyncConfiguration
41+ import org.wavescale.sourcesync.configurations.SyncConfigurationType
42+ import org.wavescale.sourcesync.configurations.SyncConfigurationType.SCP
43+ import org.wavescale.sourcesync.configurations.SyncConfigurationType.SFTP
44+ import org.wavescale.sourcesync.services.SyncRemoteConfigurationsService
45+ import org.wavescale.sourcesync.ui.tree.SyncConfigurationTreeRenderer
46+ import org.wavescale.sourcesync.ui.tree.SyncConnectionsTree
47+ import org.wavescale.sourcesync.ui.tree.SyncConnectionsTreeModel
4348
4449class ConnectionConfigurationDialog (val project : Project ) : DialogWrapper(project, true ) {
50+ private val cs = CoroutineScope (Dispatchers .IO )
4551 private var syncRemoteConfigurationsService = project.service<SyncRemoteConfigurationsService >()
4652
4753 private val splitter = JBSplitter (false , " SourcesyncConnectionConfiguration.dividerProportion" , 0.3f , 0.5f )
@@ -70,12 +76,12 @@ class ConnectionConfigurationDialog(val project: Project) : DialogWrapper(projec
7076 }
7177
7278 private fun onConfigModifications () {
73- this .updateApplyButton()
74- tree.updateUI ()
75- }
76-
77- private fun updateApplyButton () {
78- applyAction.isEnabled = treeModel.getAllComponents().hasModifications()
79+ cs.launch {
80+ applyAction.isEnabled = treeModel.getAllComponents().hasModifications ()
81+ withContext( Dispatchers . EDT ) {
82+ tree.updateUI()
83+ }
84+ }
7985 }
8086
8187 @Suppress(" UnstableApiUsage" )
0 commit comments