0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

fix: server shutdown widgets

This commit is contained in:
2025-03-24 15:24:52 +01:00
committed by wyzula-jan
parent c8bdcaabde
commit 75b24467de
2 changed files with 9 additions and 10 deletions

View File

@ -172,9 +172,6 @@ class BECWidgetsCLIServer:
# We only need to broadcast the dock areas
data = {key: self.serialize_object(val) for key, val in connections.items()}
# logger.info(f"All registered connections: {list(connections.keys())}")
for k, v in data.items():
logger.info(f"key: {k}, value: {v}")
self.client.connector.xadd(
MessageEndpoints.gui_registry_state(self.gui_id),
msg_dict={"data": messages.GUIRegistryStateMessage(state=data)},
@ -182,12 +179,9 @@ class BECWidgetsCLIServer:
)
def shutdown(self): # TODO not sure if needed when cleanup is done at level of BECConnector
logger.info(f"Shutting down server with gui_id: {self.gui_id}")
self.status = messages.BECStatus.IDLE
self._heartbeat_timer.stop()
self.emit_heartbeat()
logger.info(f"Shutting down app with {self.gui.gui_id}")
self.gui.close()
logger.info("Succeded in shutting down gui")
self.client.shutdown()
@ -318,11 +312,10 @@ def main():
def sigint_handler(*args):
# display message, for people to let it terminate gracefully
print("Caught SIGINT, exiting")
# Close all widgets
# Widgets should be all closed.
with RPCRegister.delayed_broadcast():
for widget in QApplication.instance().topLevelWidgets():
widget.close()
app.quit()
# gui.bec.close()

View File

@ -406,14 +406,20 @@ class BECDock(BECWidget, Dock):
"""
Clean up the dock, including all its widgets.
"""
# # FIXME Cleanup might be called twice
try:
logger.info(f"Cleaning up dock {self.name()}")
self.label.close()
self.label.deleteLater()
except Exception as e:
logger.error(f"Error while closing dock label: {e}")
# Remove the dock from the parent dock area
if self.parent_dock_area:
self.parent_dock_area.dock_area.docks.pop(self.name(), None)
self.parent_dock_area.config.docks.pop(self.name(), None)
self.delete_all()
self.widgets.clear()
self.label.close()
self.label.deleteLater()
super().cleanup()
def close(self):