From d8b890d67935f56573f704d9856a6a1cf7ad89f7 Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Thu, 2 Jul 2026 18:41:41 +0200 Subject: [PATCH] fix: editor cleanup on Escape/reject + stop main audition on open Co-Authored-By: Claude Opus 4.8 --- main.py | 11 ++++++++++- tests/test_ui_structure.py | 11 +++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index 34b7f86..a2770f0 100755 --- a/main.py +++ b/main.py @@ -4297,7 +4297,7 @@ class AudioEditorDialog(QDialog): proc.deleteLater() self._btn_play.setText("▶ Play") - def closeEvent(self, ev) -> None: + def _cleanup(self) -> None: self._stop_play() for _t in list(self._temps): try: @@ -4305,8 +4305,15 @@ class AudioEditorDialog(QDialog): except OSError: pass self._temps.clear() + + def closeEvent(self, ev) -> None: + self._cleanup() super().closeEvent(ev) + def reject(self) -> None: + self._cleanup() + super().reject() + def _on_save_as(self): path, _sel = QFileDialog.getSaveFileName( self, "Save edited audio", "", @@ -7076,6 +7083,7 @@ class MainWindow(QMainWindow): if not self._file_path: self._show_status("Load a video first", 3000) return + self._stop_audition() import tempfile start = self._cursor dur = self._spn_audio_len.value() @@ -7101,6 +7109,7 @@ class MainWindow(QMainWindow): self._merge_temps.add(tmp) # reuse the close-time temp sweep dlg = AudioEditorDialog(tmp, parent=self) dlg.exec() + dlg.deleteLater() def _merge_move(self, delta: int) -> None: row = self._merge_list.currentRow() diff --git a/tests/test_ui_structure.py b/tests/test_ui_structure.py index a9a068d..d5908d2 100644 --- a/tests/test_ui_structure.py +++ b/tests/test_ui_structure.py @@ -749,3 +749,14 @@ def test_editor_close_cleans_temps(win, tmp_path): dlg.close() assert not t1.exists() assert os.path.exists(str(src)) # _versions[0] (entry temp) is NOT swept by the editor + + +def test_editor_reject_cleans_temps(win, tmp_path): + import main as m + src = tmp_path / "v0.wav"; src.write_bytes(b"") + t1 = tmp_path / "t1.wav"; t1.write_bytes(b"x") + dlg = m.AudioEditorDialog(str(src), parent=win) + dlg._temps.add(str(t1)) + dlg.reject() # Escape path + assert not t1.exists() # op temp swept + assert os.path.exists(str(src)) # entry temp (_versions[0]) survives