Skip to content

Commit d2220c6

Browse files
committed
fix: could sometimes crash when navigating up or down (closes #4110)
1 parent 26d40e1 commit d2220c6

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

src/ui/main-window/ThumbnailsView.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,21 @@ class ThumbnailsView {
6969
}
7070

7171
func navigateUpOrDown(_ direction: Direction, allowWrap: Bool = true) {
72+
guard Windows.focusedWindowIndex < ThumbnailsView.recycledViews.count else { return }
7273
let focusedViewFrame = ThumbnailsView.recycledViews[Windows.focusedWindowIndex].frame
7374
let originCenter = NSMidX(focusedViewFrame)
74-
if let targetRow = nextRow(direction, allowWrap: allowWrap) {
75-
let leftSide = originCenter < NSMidX(contentView.frame)
76-
let leadingSide = App.shared.userInterfaceLayoutDirection == .leftToRight ? leftSide : !leftSide
77-
let iterable = leadingSide ? targetRow : targetRow.reversed()
78-
let targetView = iterable.first {
79-
if App.shared.userInterfaceLayoutDirection == .leftToRight {
80-
return leadingSide ? NSMaxX($0.frame) > originCenter : NSMinX($0.frame) < originCenter
81-
}
82-
return leadingSide ? NSMinX($0.frame) < originCenter : NSMaxX($0.frame) > originCenter
83-
} ?? iterable.last!
84-
let targetIndex = ThumbnailsView.recycledViews.firstIndex(of: targetView)!
85-
Windows.updateFocusedAndHoveredWindowIndex(targetIndex)
86-
}
75+
guard let targetRow = nextRow(direction, allowWrap: allowWrap), !targetRow.isEmpty else { return }
76+
let leftSide = originCenter < NSMidX(contentView.frame)
77+
let leadingSide = App.shared.userInterfaceLayoutDirection == .leftToRight ? leftSide : !leftSide
78+
let iterable = leadingSide ? targetRow : targetRow.reversed()
79+
guard let targetView = iterable.first(where: {
80+
if App.shared.userInterfaceLayoutDirection == .leftToRight {
81+
return leadingSide ? NSMaxX($0.frame) > originCenter : NSMinX($0.frame) < originCenter
82+
}
83+
return leadingSide ? NSMinX($0.frame) < originCenter : NSMaxX($0.frame) > originCenter
84+
}) ?? iterable.last else { return }
85+
guard let targetIndex = ThumbnailsView.recycledViews.firstIndex(of: targetView) else { return }
86+
Windows.updateFocusedAndHoveredWindowIndex(targetIndex)
8787
}
8888

8989
func updateItemsAndLayout() {

0 commit comments

Comments
 (0)