fix: crash in some rare scenarios with lots of windows
This commit is contained in:
1 parent
d144476691
commit
a8593477ea
2 files changed
+8
-4
No files matched your search
@@ -21,6 +21,10 @@ extension Array where Element == Window {
|
||||
(1...neededRecycledViews).forEach { _ in ThumbnailsView.recycledViews.append(ThumbnailView()) }
|
||||
}
|
||||
}
|
||||
|
||||
mutating func insertAndScaleRecycledPool(_ element: Element, at i: Int) {
|
||||
insertAndScaleRecycledPool([element], at: i)
|
||||
}
|
||||
}
|
||||
|
||||
extension NSView {
|
||||
|
||||
@@ -70,7 +70,7 @@ private func applicationActivated(_ element: AXUIElement) throws {
|
||||
let wid = try appFocusedWindow.cgWindowId() {
|
||||
DispatchQueue.main.async {
|
||||
guard let existingIndex = Windows.list.firstIndexThatMatches(appFocusedWindow, wid) else { return }
|
||||
Windows.list.insert(Windows.list.remove(at: existingIndex), at: 0)
|
||||
Windows.list.insertAndScaleRecycledPool(Windows.list.remove(at: existingIndex), at: 0)
|
||||
App.app.refreshOpenUi([Windows.list[0], Windows.list[existingIndex]])
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,7 @@ private func windowCreated(_ element: AXUIElement, _ app: NSRunningApplication)
|
||||
if Windows.list.firstIndexThatMatches(element, wid) == nil,
|
||||
let app = (Applications.list.first { $0.runningApplication.processIdentifier == app.processIdentifier }) {
|
||||
let window = Window(element, app, wid, axTitle, isFullscreen, isMinimized, position)
|
||||
Windows.list.insertAndScaleRecycledPool([window], at: 0)
|
||||
Windows.list.insertAndScaleRecycledPool(window, at: 0)
|
||||
Windows.cycleFocusedWindowIndex(1)
|
||||
App.app.refreshOpenUi([window])
|
||||
}
|
||||
@@ -119,11 +119,11 @@ private func focusedWindowChanged(_ element: AXUIElement, _ app: NSRunningApplic
|
||||
let position = try element.position()
|
||||
DispatchQueue.main.async {
|
||||
if let existingIndex = Windows.list.firstIndexThatMatches(element, wid) {
|
||||
Windows.list.insert(Windows.list.remove(at: existingIndex), at: 0)
|
||||
Windows.list.insertAndScaleRecycledPool(Windows.list.remove(at: existingIndex), at: 0)
|
||||
App.app.refreshOpenUi([Windows.list[0], Windows.list[existingIndex]])
|
||||
} else if isActualWindow,
|
||||
let app = (Applications.list.first { $0.runningApplication.processIdentifier == app.processIdentifier }) {
|
||||
Windows.list.insert(Window(element, app, wid, axTitle, isFullscreen, isMinimized, position), at: 0)
|
||||
Windows.list.insertAndScaleRecycledPool(Window(element, app, wid, axTitle, isFullscreen, isMinimized, position), at: 0)
|
||||
App.app.refreshOpenUi([Windows.list[0]])
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user