fix: list temporary AXDialog windows like activity monitor

This commit is contained in:
Louis Pontoise authored and lwouis committed 2020-03-10 14:00:37 +09:00
1 parent 946d81276f
commit 51a88382d1
2 files changed
+5 -10

No files matched your search

+2 -1
View File
@@ -18,7 +18,8 @@ extension AXUIElement {
// Some non-windows have subrole: nil (e.g. some OS elements), "AXUnknown" (e.g. Bartender), "AXSystemDialog" (e.g. Intellij tooltips)
// Some non-windows have title: nil (e.g. some OS elements)
// Minimized windows or windows of a hidden app have subrole "AXDialog"
return title() != nil && (subrole() == "AXStandardWindow" || isMinimized() || isAppHidden) && isOnNormalLevel()
// Activity Monitor main window subrole is "AXDialog" for a brief moment at launch; it then becomes "AXStandardWindow"
return title() != nil && (["AXStandardWindow", "AXDialog"].contains(subrole()) || isMinimized() || isAppHidden) && isOnNormalLevel()
}
func isOnNormalLevel() -> Bool {
+3 -9
View File
@@ -48,18 +48,12 @@ class Application: NSObject {
}
func observeNewWindows() {
var newWindows = [AXUIElement]()
for window in getActualWindows() {
guard Windows.list.firstIndexThatMatches(window) == nil else { continue }
newWindows.append(window)
}
let newWindows = axUiElement!.windows()?
.filter { $0.isActualWindow(runningApplication.isHidden) }
.filter { Windows.list.firstIndexThatMatches($0) == nil } ?? []
addWindows(newWindows)
}
private func getActualWindows() -> [AXUIElement] {
return axUiElement!.windows()?.filter { $0.isActualWindow(runningApplication.isHidden) } ?? []
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
guard let isFinishedLaunching = change![.newKey], isFinishedLaunching as! Bool else { return }
removeObserver()