From d7b3c304d7f075fa930ac53e6107091c7d71ff46 Mon Sep 17 00:00:00 2001 From: pax Date: Fri, 10 Apr 2026 18:32:57 -0500 Subject: [PATCH] add B/S keybinds to popout, refactor toggle_save --- KEYBINDS.md | 2 ++ booru_viewer/gui/main_window.py | 6 +----- booru_viewer/gui/popout/window.py | 7 +++++++ booru_viewer/gui/popout_controller.py | 1 + booru_viewer/gui/post_actions.py | 10 ++++++++++ 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/KEYBINDS.md b/KEYBINDS.md index 5a11722..e29170a 100644 --- a/KEYBINDS.md +++ b/KEYBINDS.md @@ -33,6 +33,8 @@ | `,` / `.` | Seek 3s (video) | | `Space` | Play / pause (video) | | Scroll wheel | Volume up / down (video) | +| `B` / `F` | Toggle bookmark on selected post | +| `S` | Toggle save to library (Unfiled) | | `F11` | Toggle fullscreen / windowed | | `Ctrl+H` | Hide / show UI | | `Ctrl+P` | Privacy screen | diff --git a/booru_viewer/gui/main_window.py b/booru_viewer/gui/main_window.py index 1b2e13a..f9e85b5 100644 --- a/booru_viewer/gui/main_window.py +++ b/booru_viewer/gui/main_window.py @@ -1075,11 +1075,7 @@ class BooruApp(QMainWindow): self._post_actions.toggle_bookmark(idx) return if key == Qt.Key.Key_S and self._preview._current_post: - post = self._preview._current_post - if self._post_actions.is_post_saved(post.id): - self._post_actions.unsave_from_preview() - else: - self._post_actions.save_from_preview("") + self._post_actions.toggle_save_from_preview() return elif key == Qt.Key.Key_I: self._toggle_info() diff --git a/booru_viewer/gui/popout/window.py b/booru_viewer/gui/popout/window.py index 4541800..7676c5a 100644 --- a/booru_viewer/gui/popout/window.py +++ b/booru_viewer/gui/popout/window.py @@ -113,6 +113,7 @@ class FullscreenPreview(QMainWindow): # Unfiled (root of saved_dir). save_to_folder = Signal(str) unsave_requested = Signal() + toggle_save_requested = Signal() blacklist_tag_requested = Signal(str) # tag name blacklist_post_requested = Signal() open_in_default = Signal() @@ -1366,6 +1367,12 @@ class FullscreenPreview(QMainWindow): elif key in (Qt.Key.Key_Down, Qt.Key.Key_J): self._dispatch_and_apply(NavigateRequested(direction=self._grid_cols)) return True + elif key in (Qt.Key.Key_B, Qt.Key.Key_F): + self.bookmark_requested.emit() + return True + elif key == Qt.Key.Key_S: + self.toggle_save_requested.emit() + return True elif key == Qt.Key.Key_F11: self._dispatch_and_apply(FullscreenToggled()) return True diff --git a/booru_viewer/gui/popout_controller.py b/booru_viewer/gui/popout_controller.py index 9ac38b2..b9a524f 100644 --- a/booru_viewer/gui/popout_controller.py +++ b/booru_viewer/gui/popout_controller.py @@ -97,6 +97,7 @@ class PopoutController: self._fullscreen_window.set_folders_callback(library_folders) self._fullscreen_window.save_to_folder.connect(self._app._post_actions.save_from_preview) self._fullscreen_window.unsave_requested.connect(self._app._post_actions.unsave_from_preview) + self._fullscreen_window.toggle_save_requested.connect(self._app._post_actions.toggle_save_from_preview) if show_actions: self._fullscreen_window.bookmark_requested.connect(self._app._post_actions.bookmark_from_preview) self._fullscreen_window.set_bookmark_folders_callback(self._app._db.get_folders) diff --git a/booru_viewer/gui/post_actions.py b/booru_viewer/gui/post_actions.py index 428041d..f82492a 100644 --- a/booru_viewer/gui/post_actions.py +++ b/booru_viewer/gui/post_actions.py @@ -159,6 +159,16 @@ class PostActionsController: target = folder if folder else None self.save_to_library(post, target) + def toggle_save_from_preview(self) -> None: + """Toggle library save: unsave if already saved, save to Unfiled otherwise.""" + post, _ = self.get_preview_post() + if not post: + return + if self.is_post_saved(post.id): + self.unsave_from_preview() + else: + self.save_from_preview("") + def unsave_from_preview(self) -> None: post, idx = self.get_preview_post() if not post: