From 7051cc5b93095fce414a7234f3a629697acc879f Mon Sep 17 00:00:00 2001 From: Ethanfel Date: Mon, 13 Apr 2026 23:44:03 +0200 Subject: [PATCH] fix: defer playlist scroll restore to next event loop iteration Qt processes layout changes asynchronously, so restoring the scrollbar immediately after _after_load was too early. Use QTimer.singleShot(0) to restore after Qt finishes processing pending layout events. Co-Authored-By: Claude Opus 4.6 --- main.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/main.py b/main.py index 5309718..7c5828b 100755 --- a/main.py +++ b/main.py @@ -2246,10 +2246,9 @@ class MainWindow(QMainWindow): self._spn_spread.setValue(float(self._settings.value("spread", "3.0"))) self._preview_win.show() self._preview_timer.start() - # Restore playlist scroll that video load disturbed. - sb = self._playlist.verticalScrollBar() - if sb and hasattr(self, '_playlist_scroll_stash'): - sb.setValue(self._playlist_scroll_stash) + # Restore playlist scroll after Qt processes pending layout events. + if hasattr(self, '_playlist_scroll_stash'): + QTimer.singleShot(0, self._restore_playlist_scroll) # Run DB fuzzy match off the main thread — can be slow on large databases. filename = os.path.basename(self._file_path) @@ -2267,6 +2266,11 @@ class MainWindow(QMainWindow): self.statusBar().clearMessage() self._timeline.set_markers(markers) + def _restore_playlist_scroll(self) -> None: + sb = self._playlist.verticalScrollBar() + if sb: + sb.setValue(self._playlist_scroll_stash) + def _refresh_markers(self) -> None: filename = os.path.basename(self._file_path) markers = self._db.get_markers(filename, self._profile)