diff --git a/src/ramble/dialog.py b/src/ramble/dialog.py index 81d36e1..5e932eb 100644 --- a/src/ramble/dialog.py +++ b/src/ramble/dialog.py @@ -197,6 +197,7 @@ class RambleDialog(QDialog): self.thread_pool = QThreadPool.globalInstance() self.result: Optional[RambleResult] = None + self._active_worker: Optional[GenWorker] = None # Keep reference to prevent premature GC self.field_lock_boxes: Dict[str, QCheckBox] = {} self.field_outputs: Dict[str, QTextEdit] = {} @@ -373,10 +374,10 @@ class RambleDialog(QDialog): } self._set_busy(True, "Generating...") - worker = GenWorker(self.provider, payload) - worker.signals.finished.connect(self._on_generated) - worker.signals.error.connect(self._on_gen_error) - self.thread_pool.start(worker) + self._active_worker = GenWorker(self.provider, payload) + self._active_worker.signals.finished.connect(self._on_generated) + self._active_worker.signals.error.connect(self._on_gen_error) + self.thread_pool.start(self._active_worker) def _on_generated(self, data: Dict[str, Any]): new_fields: Dict[str, str] = data.get("fields", {}) @@ -431,6 +432,10 @@ class RambleDialog(QDialog): def closeEvent(self, event): """Wait for background workers to finish before closing.""" self.thread_pool.waitForDone(1000) # Wait up to 1 second + # Clean up worker reference to prevent Qt warning + if self._active_worker is not None: + self._active_worker.signals.deleteLater() + self._active_worker = None super().closeEvent(event)