From 708d177801159d0f1cea16b205286e1400860d2a Mon Sep 17 00:00:00 2001 From: pax Date: Sat, 4 Apr 2026 21:48:31 -0500 Subject: [PATCH] Fix grid nav: up/down in last row, preview no longer steals focus - Up/Down in grid's last incomplete row moves to last post instead of triggering page turn - Preview panel set to NoFocus so clicking it doesn't steal keyboard focus from the grid --- booru_viewer/gui/grid.py | 21 +++++++++++++++------ booru_viewer/gui/preview.py | 4 +++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/booru_viewer/gui/grid.py b/booru_viewer/gui/grid.py index e204225..51bd95e 100644 --- a/booru_viewer/gui/grid.py +++ b/booru_viewer/gui/grid.py @@ -356,15 +356,24 @@ class ThumbnailGrid(QScrollArea): else: self._select(idx - 1) elif key in (Qt.Key.Key_Down, Qt.Key.Key_J): - if idx + cols >= len(self._thumbs): - self.nav_past_end.emit() + target = idx + cols + if target >= len(self._thumbs): + # If there are posts ahead in the last row, go to the last one + if idx < len(self._thumbs) - 1: + self._select(len(self._thumbs) - 1) + else: + self.nav_past_end.emit() else: - self._select(idx + cols) + self._select(target) elif key in (Qt.Key.Key_Up, Qt.Key.Key_K): - if idx - cols < 0: - self.nav_before_start.emit() + target = idx - cols + if target < 0: + if idx > 0: + self._select(0) + else: + self.nav_before_start.emit() else: - self._select(idx - cols) + self._select(target) elif key == Qt.Key.Key_Return or key == Qt.Key.Key_Enter: if 0 <= idx < len(self._thumbs): self.post_activated.emit(idx) diff --git a/booru_viewer/gui/preview.py b/booru_viewer/gui/preview.py index 6588e74..9b9a334 100644 --- a/booru_viewer/gui/preview.py +++ b/booru_viewer/gui/preview.py @@ -473,11 +473,13 @@ class ImagePreview(QWidget): # Image viewer (index 0) self._image_viewer = ImageViewer() + self._image_viewer.setFocusPolicy(Qt.FocusPolicy.NoFocus) self._image_viewer.close_requested.connect(self.close_requested) self._stack.addWidget(self._image_viewer) # Video player (index 1) self._video_player = VideoPlayer() + self._video_player.setFocusPolicy(Qt.FocusPolicy.NoFocus) self._stack.addWidget(self._video_player) # Info label @@ -485,7 +487,7 @@ class ImagePreview(QWidget): self._info_label.setStyleSheet("padding: 2px 6px;") layout.addWidget(self._info_label) - self.setFocusPolicy(Qt.FocusPolicy.StrongFocus) + self.setFocusPolicy(Qt.FocusPolicy.NoFocus) self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.customContextMenuRequested.connect(self._on_context_menu)