From fec14706291214974afd32380fe8bb1042639a68 Mon Sep 17 00:00:00 2001 From: pax Date: Sun, 5 Apr 2026 02:29:42 -0500 Subject: [PATCH] Slideshow remembers video position, fix preview restore on close - Grabs video position before opening slideshow and seeks to it - Use closed signal from closeEvent instead of destroyed for reliable preview restoration on slideshow close --- booru_viewer/gui/app.py | 15 +++++++++++---- booru_viewer/gui/preview.py | 2 ++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/booru_viewer/gui/app.py b/booru_viewer/gui/app.py index 8d0b532..f3c67c1 100644 --- a/booru_viewer/gui/app.py +++ b/booru_viewer/gui/app.py @@ -1082,21 +1082,28 @@ class BooruApp(QMainWindow): path = self._preview._current_path if not path: return - # Clear the main preview — slideshow takes over info = self._preview._info_label.text() + # Grab video position before clearing + video_pos = 0 + if self._preview._stack.currentIndex() == 1: + video_pos = self._preview._video_player._player.position() + # Clear the main preview — slideshow takes over self._preview.clear() self._preview._info_label.setText(info) self._preview._current_path = path from .preview import FullscreenPreview cols = self._grid._flow.columns - show_actions = self._stack.currentIndex() != 2 # hide for Library tab + show_actions = self._stack.currentIndex() != 2 self._fullscreen_window = FullscreenPreview(grid_cols=cols, show_actions=show_actions, parent=self) self._fullscreen_window.navigate.connect(self._navigate_fullscreen) if show_actions: self._fullscreen_window.bookmark_requested.connect(self._bookmark_from_preview) self._fullscreen_window.save_toggle_requested.connect(self._save_toggle_from_slideshow) - self._fullscreen_window.destroyed.connect(self._on_fullscreen_closed) - self._fullscreen_window.set_media(path, self._preview._info_label.text()) + self._fullscreen_window.closed.connect(self._on_fullscreen_closed) + self._fullscreen_window.set_media(path, info) + # Seek to the position from the preview + if video_pos > 0 and self._fullscreen_window._stack.currentIndex() == 1: + self._fullscreen_window._video._player.setPosition(video_pos) if show_actions: self._update_fullscreen_state() diff --git a/booru_viewer/gui/preview.py b/booru_viewer/gui/preview.py index 30b579c..c1759f7 100644 --- a/booru_viewer/gui/preview.py +++ b/booru_viewer/gui/preview.py @@ -28,6 +28,7 @@ class FullscreenPreview(QMainWindow): navigate = Signal(int) # direction: -1/+1 for left/right, -cols/+cols for up/down bookmark_requested = Signal() save_toggle_requested = Signal() # save or unsave depending on state + closed = Signal() def __init__(self, grid_cols: int = 3, show_actions: bool = True, parent=None) -> None: super().__init__(parent, Qt.WindowType.Window) @@ -176,6 +177,7 @@ class FullscreenPreview(QMainWindow): from PySide6.QtWidgets import QApplication QApplication.instance().removeEventFilter(self) self._video.stop() + self.closed.emit() super().closeEvent(event)