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
This commit is contained in:
pax 2026-04-04 21:48:31 -05:00
parent 6554344523
commit 708d177801
2 changed files with 18 additions and 7 deletions

View File

@ -356,15 +356,24 @@ class ThumbnailGrid(QScrollArea):
else: else:
self._select(idx - 1) self._select(idx - 1)
elif key in (Qt.Key.Key_Down, Qt.Key.Key_J): elif key in (Qt.Key.Key_Down, Qt.Key.Key_J):
if idx + cols >= len(self._thumbs): 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() self.nav_past_end.emit()
else: else:
self._select(idx + cols) self._select(target)
elif key in (Qt.Key.Key_Up, Qt.Key.Key_K): elif key in (Qt.Key.Key_Up, Qt.Key.Key_K):
if idx - cols < 0: target = idx - cols
if target < 0:
if idx > 0:
self._select(0)
else:
self.nav_before_start.emit() self.nav_before_start.emit()
else: else:
self._select(idx - cols) self._select(target)
elif key == Qt.Key.Key_Return or key == Qt.Key.Key_Enter: elif key == Qt.Key.Key_Return or key == Qt.Key.Key_Enter:
if 0 <= idx < len(self._thumbs): if 0 <= idx < len(self._thumbs):
self.post_activated.emit(idx) self.post_activated.emit(idx)

View File

@ -473,11 +473,13 @@ class ImagePreview(QWidget):
# Image viewer (index 0) # Image viewer (index 0)
self._image_viewer = ImageViewer() self._image_viewer = ImageViewer()
self._image_viewer.setFocusPolicy(Qt.FocusPolicy.NoFocus)
self._image_viewer.close_requested.connect(self.close_requested) self._image_viewer.close_requested.connect(self.close_requested)
self._stack.addWidget(self._image_viewer) self._stack.addWidget(self._image_viewer)
# Video player (index 1) # Video player (index 1)
self._video_player = VideoPlayer() self._video_player = VideoPlayer()
self._video_player.setFocusPolicy(Qt.FocusPolicy.NoFocus)
self._stack.addWidget(self._video_player) self._stack.addWidget(self._video_player)
# Info label # Info label
@ -485,7 +487,7 @@ class ImagePreview(QWidget):
self._info_label.setStyleSheet("padding: 2px 6px;") self._info_label.setStyleSheet("padding: 2px 6px;")
layout.addWidget(self._info_label) layout.addWidget(self._info_label)
self.setFocusPolicy(Qt.FocusPolicy.StrongFocus) self.setFocusPolicy(Qt.FocusPolicy.NoFocus)
self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
self.customContextMenuRequested.connect(self._on_context_menu) self.customContextMenuRequested.connect(self._on_context_menu)