From 397f53b2a12939204135b97c369f19a7c9046e7c Mon Sep 17 00:00:00 2001 From: wyzula-jan Date: Wed, 20 May 2026 19:06:33 +0200 Subject: [PATCH] fix(device_inputs): device_config_update with Qt.ConnectionType.QueuedConnection --- .../device_input/device_combobox/device_combobox.py | 6 ++++-- .../device_input/signal_combobox/signal_combobox.py | 11 ++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py b/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py index 9ebffa4e..fb09e607 100644 --- a/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py +++ b/bec_widgets/widgets/control/device_input/device_combobox/device_combobox.py @@ -9,7 +9,7 @@ from bec_lib.device import ComputedSignal, Device, Positioner, ReadoutPriority from bec_lib.device import Signal as BECSignal from bec_lib.logger import bec_logger from pydantic import Field, field_validator -from qtpy.QtCore import QSize, QStringListModel, Signal, Slot +from qtpy.QtCore import QSize, QStringListModel, Qt, Signal, Slot from qtpy.QtWidgets import QComboBox, QCompleter, QSizePolicy from bec_widgets.utils.bec_connector import ConnectionConfig @@ -219,7 +219,9 @@ class DeviceComboBox(BECWidget, QComboBox): self._callback_id = self.bec_dispatcher.client.callbacks.register( EventType.DEVICE_UPDATE, self.on_device_update ) - self.device_config_update.connect(self.update_devices_from_filters) + self.device_config_update.connect( + self.update_devices_from_filters, Qt.ConnectionType.QueuedConnection + ) self.currentTextChanged.connect(self.check_validity) self.check_validity(self.currentText()) diff --git a/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py b/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py index 03dc0836..94fe3ed9 100644 --- a/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py +++ b/bec_widgets/widgets/control/device_input/signal_combobox/signal_combobox.py @@ -77,6 +77,7 @@ class SignalComboBox(BECWidget, QComboBox): device_signal_changed = Signal(str) signal_reset = Signal() + device_config_update = Signal() def __init__( self, @@ -138,7 +139,10 @@ class SignalComboBox(BECWidget, QComboBox): self.autocomplete = True self._device_update_register = self.bec_dispatcher.client.callbacks.register( - EventType.DEVICE_UPDATE, self.update_signals_from_filters + EventType.DEVICE_UPDATE, self.on_device_update + ) + self.device_config_update.connect( + self.update_signals_from_filters, Qt.ConnectionType.QueuedConnection ) self.currentTextChanged.connect(self.on_text_changed) @@ -247,6 +251,11 @@ class SignalComboBox(BECWidget, QComboBox): ), ) + def on_device_update(self, action: str, content: dict) -> None: + """Refresh filters when BEC reports device configuration changes.""" + if action in ["add", "remove", "reload"]: + self.device_config_update.emit() + @Property(str) def device(self) -> str: """Selected device."""