add B/S keybinds to popout, refactor toggle_save

This commit is contained in:
pax 2026-04-10 18:32:57 -05:00
parent 28c40bc1f5
commit d7b3c304d7
5 changed files with 21 additions and 5 deletions

View File

@ -33,6 +33,8 @@
| `,` / `.` | Seek 3s (video) | | `,` / `.` | Seek 3s (video) |
| `Space` | Play / pause (video) | | `Space` | Play / pause (video) |
| Scroll wheel | Volume up / down (video) | | Scroll wheel | Volume up / down (video) |
| `B` / `F` | Toggle bookmark on selected post |
| `S` | Toggle save to library (Unfiled) |
| `F11` | Toggle fullscreen / windowed | | `F11` | Toggle fullscreen / windowed |
| `Ctrl+H` | Hide / show UI | | `Ctrl+H` | Hide / show UI |
| `Ctrl+P` | Privacy screen | | `Ctrl+P` | Privacy screen |

View File

@ -1075,11 +1075,7 @@ class BooruApp(QMainWindow):
self._post_actions.toggle_bookmark(idx) self._post_actions.toggle_bookmark(idx)
return return
if key == Qt.Key.Key_S and self._preview._current_post: if key == Qt.Key.Key_S and self._preview._current_post:
post = self._preview._current_post self._post_actions.toggle_save_from_preview()
if self._post_actions.is_post_saved(post.id):
self._post_actions.unsave_from_preview()
else:
self._post_actions.save_from_preview("")
return return
elif key == Qt.Key.Key_I: elif key == Qt.Key.Key_I:
self._toggle_info() self._toggle_info()

View File

@ -113,6 +113,7 @@ class FullscreenPreview(QMainWindow):
# Unfiled (root of saved_dir). # Unfiled (root of saved_dir).
save_to_folder = Signal(str) save_to_folder = Signal(str)
unsave_requested = Signal() unsave_requested = Signal()
toggle_save_requested = Signal()
blacklist_tag_requested = Signal(str) # tag name blacklist_tag_requested = Signal(str) # tag name
blacklist_post_requested = Signal() blacklist_post_requested = Signal()
open_in_default = Signal() open_in_default = Signal()
@ -1366,6 +1367,12 @@ class FullscreenPreview(QMainWindow):
elif key in (Qt.Key.Key_Down, Qt.Key.Key_J): elif key in (Qt.Key.Key_Down, Qt.Key.Key_J):
self._dispatch_and_apply(NavigateRequested(direction=self._grid_cols)) self._dispatch_and_apply(NavigateRequested(direction=self._grid_cols))
return True 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: elif key == Qt.Key.Key_F11:
self._dispatch_and_apply(FullscreenToggled()) self._dispatch_and_apply(FullscreenToggled())
return True return True

View File

@ -97,6 +97,7 @@ class PopoutController:
self._fullscreen_window.set_folders_callback(library_folders) 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.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.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: if show_actions:
self._fullscreen_window.bookmark_requested.connect(self._app._post_actions.bookmark_from_preview) 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) self._fullscreen_window.set_bookmark_folders_callback(self._app._db.get_folders)

View File

@ -159,6 +159,16 @@ class PostActionsController:
target = folder if folder else None target = folder if folder else None
self.save_to_library(post, target) 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: def unsave_from_preview(self) -> None:
post, idx = self.get_preview_post() post, idx = self.get_preview_post()
if not post: if not post: