fix: list temporary AXDialog windows like activity monitor
This commit is contained in:
1 parent
946d81276f
commit
51a88382d1
2 files changed
+5
-10
No files matched your search
@@ -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 {
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user