From b03b0aa22efc6208b0252130860e84ad535d01ff Mon Sep 17 00:00:00 2001 From: "louis.pontoise" Date: Fri, 10 Jan 2020 10:39:18 +0900 Subject: [PATCH] fix: ignore trigger shortcuts if mission control is active --- alt-tab-macos/api-wrappers/CGWindow.swift | 9 +++++++++ alt-tab-macos/ui/App.swift | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/alt-tab-macos/api-wrappers/CGWindow.swift b/alt-tab-macos/api-wrappers/CGWindow.swift index ed8b47f84..58d1887d9 100644 --- a/alt-tab-macos/api-wrappers/CGWindow.swift +++ b/alt-tab-macos/api-wrappers/CGWindow.swift @@ -8,6 +8,15 @@ extension CGWindow { return CGWindowListCopyWindowInfo([.excludeDesktopElements, option], kCGNullWindowID) as! [CGWindow] } + static func isMissionControlActive() -> Bool { + // when Mission Control is active, the Dock process spawns some windows. We observe this side-effect and infer + for window in windows(.optionOnScreenOnly) { + guard window.ownerName() == "Dock" else { continue } + return true + } + return false + } + // workaround: filtering this criteria seems to remove non-windows UI elements func isNotMenubarOrOthers() -> Bool { return layer() == 0 diff --git a/alt-tab-macos/ui/App.swift b/alt-tab-macos/ui/App.swift index 042d42b03..fdbc9acfa 100644 --- a/alt-tab-macos/ui/App.swift +++ b/alt-tab-macos/ui/App.swift @@ -82,7 +82,7 @@ class App: NSApplication, NSApplicationDelegate, NSWindowDelegate { if isFirstSummon { debugPrint("showUiOrCycleSelection: isFirstSummon") isFirstSummon = false - if Windows.listRecentlyUsedFirst.count == 0 { + if Windows.listRecentlyUsedFirst.count == 0 || CGWindow.isMissionControlActive() { appIsBeingUsed = false isFirstSummon = true return @@ -112,6 +112,7 @@ class App: NSApplication, NSApplicationDelegate, NSWindowDelegate { func focusSelectedWindow(_ window: Window?) { hideUi() + guard !CGWindow.isMissionControlActive() else { return } window?.focus() } }