@@ -45,6 +45,7 @@ class NewLayoutDialog(
4545 private val resetConnectionButton: JButton
4646 private val clientsList: JBList <ClientWrapper >
4747 private val deviceChangedAction = DeviceChangedActions ()
48+ private var processesRefreshJob: Job ? = null
4849 var result: LayoutRecordOptions ? = null
4950 private set
5051
@@ -73,6 +74,7 @@ class NewLayoutDialog(
7374 }
7475
7576 showAllProcesses = JCheckBox (" any processes" )
77+ showAllProcesses.isSelected = true
7678 showAllProcesses.addActionListener {
7779 val deviceWrapper = devicesComboBox.selectedItem as DeviceWrapper ?
7880
@@ -81,6 +83,27 @@ class NewLayoutDialog(
8183 }
8284 }
8385
86+ // Start processes refresh timer when dialog is shown
87+ addWindowListener(object : java.awt.event.WindowAdapter () {
88+ override fun windowOpened (e : java.awt.event.WindowEvent ? ) {
89+ logger.d(" $TAG : windowOpened() - Starting process auto-refresh" )
90+ // Immediately populate clients for the selected device
91+ val deviceWrapper = devicesComboBox.selectedItem as DeviceWrapper ?
92+ if (deviceWrapper != null ) {
93+ logger.d(" $TAG : windowOpened() - Populating clients for device: ${deviceWrapper.device} " )
94+ populateWithClients(deviceWrapper.device)
95+ } else {
96+ logger.w(" $TAG : windowOpened() - No device selected" )
97+ }
98+ startProcessesRefreshTimer()
99+ }
100+
101+ override fun windowClosed (e : java.awt.event.WindowEvent ? ) {
102+ logger.d(" $TAG : windowClosed() - Stopping process auto-refresh" )
103+ stopProcessesRefreshTimer()
104+ }
105+ })
106+
84107 clientsList = JBList (clientListModel)
85108 val listScroll = JBScrollPane (clientsList)
86109 setupClientsList(clientsList)
@@ -237,24 +260,31 @@ class NewLayoutDialog(
237260 }
238261
239262 fun showDialog () {
263+ logger.d(" $TAG : showDialog() - Opening dialog" )
240264 deviceProvider.deviceChangedActions.add(deviceChangedAction)
241265 setLocationRelativeTo(owner)
242266 result = null
243267 populateWithDevices()
244268 isVisible = true
269+ logger.d(" $TAG : showDialog() - Dialog closed, result: ${result != null } " )
245270 }
246271
247272 private fun populateWithDevices () {
273+ logger.d(" $TAG : populateWithDevices() - Requesting devices from provider" )
248274 GlobalScope .launch(Dispatchers .EDT ) {
249275 val devices = deviceProvider.requestDevices()
250- logger.d(" $TAG : received ${devices.size} devices" )
276+ logger.d(" $TAG : populateWithDevices() - received ${devices.size} devices" )
251277 devicesComboBox.removeAllItems()
252278 for (device in devices) {
253279 devicesComboBox.addItem(RealDeviceWrapper (device))
280+ logger.d(" $TAG : populateWithDevices() - added device: ${device} " )
254281 }
255282
256283 if (devicesComboBox.itemCount > 0 ) {
257284 devicesComboBox.selectedIndex = 0
285+ // Immediately populate clients for the first device
286+ logger.d(" $TAG : populateWithDevices() - selecting first device and populating clients" )
287+ populateWithClients((devicesComboBox.selectedItem as DeviceWrapper ).device)
258288 }
259289 if (devicesComboBox.itemCount == 1 ) {
260290 clientsList.requestFocus()
@@ -263,6 +293,7 @@ class NewLayoutDialog(
263293 }
264294
265295 private fun populateWithClients (device : IDevice ) {
296+ logger.d(" $TAG : populateWithClients() called for device: ${device} " )
266297 GlobalScope .launch(Dispatchers .EDT ) {
267298 val clients = getClientsWithWindow(device, showAllProcesses.isSelected)
268299 clientListModel.clear()
@@ -280,6 +311,7 @@ class NewLayoutDialog(
280311 }
281312 pack()
282313 repaint()
314+ logger.d(" $TAG : populateWithClients() completed, clients count: ${clients.size} " )
283315 }
284316 }
285317
@@ -340,6 +372,32 @@ class NewLayoutDialog(
340372 }
341373 }
342374
375+ private fun startProcessesRefreshTimer () {
376+ logger.d(" $TAG : startProcessesRefreshTimer() - Starting 3-second refresh timer" )
377+ processesRefreshJob = GlobalScope .launch(Dispatchers .Default ) {
378+ while (isActive) {
379+ delay(3000 ) // 3 seconds
380+ withContext(Dispatchers .EDT ) {
381+ val deviceWrapper = devicesComboBox.selectedItem as DeviceWrapper ?
382+ if (deviceWrapper != null ) {
383+ logger.d(" $TAG : timer tick - populating clients for device: ${deviceWrapper.device} " )
384+ populateWithClients(deviceWrapper.device)
385+ } else {
386+ logger.w(" $TAG : timer tick - no device selected, skipping refresh" )
387+ }
388+ }
389+ }
390+ }
391+ logger.d(" $TAG : startProcessesRefreshTimer() - Timer job started: ${processesRefreshJob?.hashCode()} " )
392+ }
393+
394+ private fun stopProcessesRefreshTimer () {
395+ logger.d(" $TAG : stopProcessesRefreshTimer() - Cancelling timer job: ${processesRefreshJob?.hashCode()} " )
396+ processesRefreshJob?.cancel()
397+ processesRefreshJob = null
398+ logger.d(" $TAG : stopProcessesRefreshTimer() - Timer stopped" )
399+ }
400+
343401 private inner class FocusPolicy : FocusTraversalPolicy () {
344402 override fun getComponentAfter (aContainer : Container , aComponent : Component ): Component {
345403 return when (aComponent) {
0 commit comments