From 1bca012faa84ffb4daf50728b2bf6d339a57d447 Mon Sep 17 00:00:00 2001 From: Louis Pontoise Date: Thu, 7 May 2020 01:05:31 +0900 Subject: [PATCH] fix: don't display invalid windows (may fix #292 #200) --- src/logic/Windows.swift | 6 ++++++ src/ui/App.swift | 1 + 2 files changed, 7 insertions(+) diff --git a/src/logic/Windows.swift b/src/logic/Windows.swift index 6a47e7c6..0632ff62 100644 --- a/src/logic/Windows.swift +++ b/src/logic/Windows.swift @@ -94,6 +94,12 @@ class Windows { } } + // some window can get invalid *after* we add them to our list, but without us getting notified about it + // workaround: we remove the invalid windows right before showing the UI + static func removeWindowsWhichBecameInvalid() { + Windows.list.removeAll(where: { !$0.axUiElement.isActualWindow($0.application.runningApplication.bundleIdentifier) }) + } + static func refreshIfWindowShouldBeShownToTheUser(_ window: Window, _ screen: NSScreen) { window.shouldShowTheUser = !(!Preferences.showMinimizedWindows && window.isMinimized) && !(!Preferences.showHiddenWindows && window.isHidden) && diff --git a/src/ui/App.swift b/src/ui/App.swift index 70e81684..574ce922 100644 --- a/src/ui/App.swift +++ b/src/ui/App.swift @@ -194,6 +194,7 @@ class App: NSApplication, NSApplicationDelegate { // TODO: find a way to update space index when windows are moved to another space, instead of on every trigger Windows.updateSpaces() let screen = Screen.preferred() + Windows.removeWindowsWhichBecameInvalid() Windows.refreshWhichWindowsToShowTheUser(screen) if Windows.list.first(where: { $0.shouldShowTheUser }) == nil { hideUi(); return } Windows.updateFocusedWindowIndex(0)