From 19c13d1ec25c358e36cc02780297de0800d41d48 Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Wed, 15 Oct 2025 13:19:50 +0200 Subject: [PATCH 1/2] move start thread outside constructor --- .../base_qt_plugin_dialog.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/napari_plugin_manager/base_qt_plugin_dialog.py b/src/napari_plugin_manager/base_qt_plugin_dialog.py index 8490058..3e20f71 100644 --- a/src/napari_plugin_manager/base_qt_plugin_dialog.py +++ b/src/napari_plugin_manager/base_qt_plugin_dialog.py @@ -27,6 +27,7 @@ QKeySequence, QMovie, QShortcut, + QShowEvent, ) from qtpy.QtWidgets import ( QCheckBox, @@ -1073,13 +1074,6 @@ def __init__(self, parent: QDialog = None, prefix=None) -> None: self.installer.allFinished.connect(self._on_installer_all_finished) self.setAcceptDrops(True) - if ( - parent is not None and parent._plugin_dialog is self - ) or parent is None: - self.refresh() - self._setup_shortcuts() - self._setup_theme_update() - # region - Private methods # ------------------------------------------------------------------------ def _enable_refresh_button(self) -> None: @@ -1765,6 +1759,15 @@ def exec_(self) -> None: self._update_theme(None) self._first_open = False + def showEvent(self, event: QShowEvent) -> None: + super().showEvent(event) + if ( + self.parent() is not None and self.parent()._plugin_dialog is self + ) or self.parent() is None: + self.refresh() + self._setup_shortcuts() + self._setup_theme_update() + def hideEvent(self, event: QHideEvent) -> None: if len(self.modified_set): # At least one plugin was installed, uninstalled or updated so @@ -1774,6 +1777,10 @@ def hideEvent(self, event: QHideEvent) -> None: RestartWarningDialog(self).exec_() self.packages_search.clear() self.toggle_status(False) + if self.worker is not None and self.worker.is_running: + self.worker.terminate() + self.worker.wait() + self.worker = None super().hideEvent(event) # endregion - Qt overrides From dca5aee61c487c721be4238548c08707137cc45c Mon Sep 17 00:00:00 2001 From: Grzegorz Bokota Date: Wed, 15 Oct 2025 14:00:13 +0200 Subject: [PATCH 2/2] make worker synchronous --- src/napari_plugin_manager/_tests/conftest.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/napari_plugin_manager/_tests/conftest.py b/src/napari_plugin_manager/_tests/conftest.py index c711238..537e12d 100644 --- a/src/napari_plugin_manager/_tests/conftest.py +++ b/src/napari_plugin_manager/_tests/conftest.py @@ -23,6 +23,15 @@ def raise_on_call(*_, **__): monkeypatch.setattr(QDialog, 'exec_', raise_on_call) +@pytest.fixture(autouse=True) +def _disable_generator_worker(monkeypatch, request): + if 'enable_generator_worker' not in request.keywords: + # Replace GeneratorWorker.start with GeneratorWorker.run to make it synchronous + from napari._qt.qthreading import GeneratorWorker + + monkeypatch.setattr(GeneratorWorker, 'start', GeneratorWorker.run) + + if TYPE_CHECKING: from virtualenv.run import Session