From c2bb89625e2651ac0a6045100444eeebe6f81dc6 Mon Sep 17 00:00:00 2001 From: Louis Pontoise Date: Thu, 27 Aug 2020 03:09:40 +0900 Subject: [PATCH] perf: alt-tab appears quicker when summoned --- src/logic/Application.swift | 4 ++++ src/logic/Window.swift | 4 ++-- src/logic/events/AccessibilityEvents.swift | 3 +++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/logic/Application.swift b/src/logic/Application.swift index ae36083f..39c2b848 100644 --- a/src/logic/Application.swift +++ b/src/logic/Application.swift @@ -7,6 +7,8 @@ class Application: NSObject { var axUiElement: AXUIElement? var axObserver: AXObserver? var isReallyFinishedLaunching = false + var isHidden: Bool! + var icon: NSImage? var dockLabel: String? static func notifications(_ app: NSRunningApplication) -> [String] { @@ -30,6 +32,8 @@ class Application: NSObject { init(_ runningApplication: NSRunningApplication) { self.runningApplication = runningApplication super.init() + isHidden = runningApplication.isHidden + icon = runningApplication.icon addAndObserveWindows() kvObservers = [ runningApplication.observe(\.isFinishedLaunching, options: [.new]) { [weak self] _, _ in self?.addAndObserveWindows() }, diff --git a/src/logic/Window.swift b/src/logic/Window.swift index cf9ffbdc..3aca57cd 100644 --- a/src/logic/Window.swift +++ b/src/logic/Window.swift @@ -4,10 +4,10 @@ class Window { var cgWindowId: CGWindowID var title: String! var thumbnail: NSImage? - var icon: NSImage? { get { application.runningApplication.icon } } + var icon: NSImage? { get { application.icon } } var shouldShowTheUser = true var isTabbed: Bool = false - var isHidden: Bool { get { application.runningApplication.isHidden } } + var isHidden: Bool { get { application.isHidden } } var dockLabel: Int? { get { application.dockLabel.flatMap { Int($0) } } } var isFullscreen: Bool var isMinimized: Bool diff --git a/src/logic/events/AccessibilityEvents.swift b/src/logic/events/AccessibilityEvents.swift index 68c2f817..987328bb 100644 --- a/src/logic/events/AccessibilityEvents.swift +++ b/src/logic/events/AccessibilityEvents.swift @@ -84,6 +84,9 @@ private func applicationActivated(_ element: AXUIElement) throws { private func applicationHiddenOrShown(_ element: AXUIElement, _ pid: pid_t, _ type: String) throws { DispatchQueue.main.async { + if let app = (Applications.list.first { $0.runningApplication.processIdentifier == pid }) { + app.isHidden = type == kAXApplicationHiddenNotification + } let windows = Windows.list.filter { // for AXUIElement of apps, CFEqual or == don't work; looks like a Cocoa bug return $0.application.runningApplication.processIdentifier == pid