| | |
| | | |
| | | public static func shouldInclude(_ record: WindowEnumerationRecord) -> Bool { |
| | | guard record.id != 0 else { return false } |
| | | guard record.activationPolicy == .regular else { return false } |
| | | guard hasSupportedActivationPolicy(record) else { return false } |
| | | guard isSupportedSubrole(record.subrole) else { return false } |
| | | guard !record.app.isHidden || record.isFullscreen else { return false } |
| | | guard !record.isGhost else { return false } |
| | | guard !record.isDesktopElement else { return false } |
| | | guard !record.isSystemCritical else { return false } |
| | | guard record.isInteractable else { return false } |
| | | guard !isKnownClosedShottrCGPlaceholder(record) else { return false } |
| | | guard !isCGOnlyOffscreenGhost(record) else { return false } |
| | | guard !isKnownClosedDocumentPlaceholder(record) else { return false } |
| | | |
| | | return record.isMinimized || record.isFullscreen || isLargeEnough(record.size) |
| | | } |
| | | |
| | | private static func hasSupportedActivationPolicy(_ record: WindowEnumerationRecord) -> Bool { |
| | | record.activationPolicy == .regular |
| | | || (record.activationPolicy == .accessory && isKnownAccessoryMainWindow(record)) |
| | | } |
| | | |
| | | public static func window(from record: WindowEnumerationRecord) -> AlignerWindow? { |
| | |
| | | } |
| | | |
| | | private static func isCGOnlyOffscreenGhost(_ record: WindowEnumerationRecord) -> Bool { |
| | | record.identifierSource == .cgWindow |
| | | guard record.identifierSource == .cgWindow, |
| | | !record.hasAXBacking, |
| | | !record.isOnscreen, |
| | | !record.isMinimized, |
| | | !record.isFullscreen |
| | | else { |
| | | return false |
| | | } |
| | | |
| | | if !record.spaceIDs.isEmpty { |
| | | return false |
| | | } |
| | | |
| | | return !isKnownCGOnlyOffscreenMainWindow(record) |
| | | } |
| | | |
| | | private static func isKnownCGOnlyOffscreenMainWindow(_ record: WindowEnumerationRecord) -> Bool { |
| | | let trimmedTitle = record.title.trimmingCharacters(in: .whitespacesAndNewlines) |
| | | |
| | | switch record.app.bundleIdentifier { |
| | | case "com.apple.finder": |
| | | return !trimmedTitle.isEmpty && isLargeEnough(record.size) |
| | | case "io.dcloud.HBuilderX": |
| | | return !trimmedTitle.isEmpty && isLargeEnough(record.size) |
| | | default: |
| | | return false |
| | | } |
| | | } |
| | | |
| | | private static func isKnownAccessoryMainWindow(_ record: WindowEnumerationRecord) -> Bool { |
| | | let trimmedTitle = record.title.trimmingCharacters(in: .whitespacesAndNewlines) |
| | | |
| | | return record.app.bundleIdentifier == "cc.ffitch.shottr" |
| | | && trimmedTitle == "Shottr" |
| | | && record.isOnscreen |
| | | && isLargeEnough(record.size) |
| | | } |
| | | |
| | | private static func isKnownClosedShottrCGPlaceholder(_ record: WindowEnumerationRecord) -> Bool { |
| | | let trimmedTitle = record.title.trimmingCharacters(in: .whitespacesAndNewlines) |
| | | |
| | | return record.app.bundleIdentifier == "cc.ffitch.shottr" |
| | | && trimmedTitle == "Shottr" |
| | | && record.identifierSource == .cgWindow |
| | | && !record.hasAXBacking |
| | | && !record.isOnscreen |
| | | && !record.isMinimized |