diff --git a/src/api-wrappers/AXUIElement.swift b/src/api-wrappers/AXUIElement.swift index 67d92a68..676bddd5 100644 --- a/src/api-wrappers/AXUIElement.swift +++ b/src/api-wrappers/AXUIElement.swift @@ -85,7 +85,7 @@ extension AXUIElement { (books(runningApp) || keynote(runningApp) || ( // CGWindowLevel == .normalWindow helps filter out iStats Pro and other top-level pop-overs, and floating windows level == AXUIElement.normalLevel && - jetbrainApp(runningApp, title) && + jetbrainApp(runningApp, title, subrole) && ([kAXStandardWindowSubrole, kAXDialogSubrole].contains(subrole) || openBoard(runningApp) || adobeAudition(runningApp, subrole) || @@ -100,10 +100,11 @@ extension AXUIElement { drBetotte(runningApp)))) } - private static func jetbrainApp(_ runningApp: NSRunningApplication, _ title: String?) -> Bool { + private static func jetbrainApp(_ runningApp: NSRunningApplication, _ title: String?, _ subrole: String?) -> Bool { // jetbrain apps sometimes generate non-windows that pass all checks in isActualWindow // they have no title, so we can filter them out based on that - return runningApp.bundleIdentifier?.range(of: "^com\\.jetbrains\\..+?$", options: .regularExpression) == nil || (title != nil && title != "") + return runningApp.bundleIdentifier?.range(of: "^com\\.jetbrains\\..+?$", options: .regularExpression) == nil || + (subrole == kAXStandardWindowSubrole || title != nil && title != "") } private static func keynote(_ runningApp: NSRunningApplication) -> Bool {