From c287788d9e9156ab8e0a27f5d8fe24fc5706362e Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Sun, 12 Apr 2026 11:01:29 +0200 Subject: [PATCH] fix: marker click properly restores settings without cursor clear race Emit marker_clicked before seek, and use a flag to prevent _on_cursor_changed from immediately clearing the overwrite state and settings that were just restored. Co-Authored-By: Claude Sonnet 4.6 --- main.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index f01cfe6..d06b145 100755 --- a/main.py +++ b/main.py @@ -645,8 +645,10 @@ class TimelineWidget(QWidget): for (frac, output_path) in self._hover_cache: if abs(x - frac * w) <= 6: t = frac * self._duration - self._seek(x) + # Emit marker_clicked BEFORE seek so the handler can set + # _overwrite_path before _on_cursor_changed clears it. self.marker_clicked.emit(t, output_path) + self._seek(x) return self._seek(event.position().x()) @@ -1248,6 +1250,7 @@ class MainWindow(QMainWindow): self._export_worker: ExportWorker | None = None self._last_export_path: str = "" self._overwrite_path: str = "" # set when a marker is selected for re-export + self._marker_just_clicked: bool = False self._mask_worker: MaskWorker | None = None self._db_worker: _DBWorker | None = None self._frame_grabber: FrameGrabber | None = None @@ -1617,6 +1620,7 @@ class MainWindow(QMainWindow): ) def _on_marker_clicked(self, start_time: float, output_path: str) -> None: + self._marker_just_clicked = True self._overwrite_path = output_path self._lbl_next.setText(f"↺ {os.path.basename(output_path)}") self._btn_delete.setEnabled(True) @@ -1752,12 +1756,13 @@ class MainWindow(QMainWindow): self._cursor = t self._lbl_cursor.setText(f"cursor: {format_time(t)}") self._preview_timer.start() - if self._overwrite_path: + if self._overwrite_path and not self._marker_just_clicked: self._overwrite_path = "" self._update_next_label() if not self._last_export_path: self._btn_delete.setEnabled(False) self._btn_delete.setText("Delete") + self._marker_just_clicked = False if self._mpv.is_playing(): self._mpv.play_loop(t, t + self._clip_span) else: