Skip to content

Commit

Permalink
Rework application frame getter
Browse files Browse the repository at this point in the history
  • Loading branch information
jordanbaird committed Jul 4, 2024
1 parent f9daa2a commit 5514bad
Show file tree
Hide file tree
Showing 8 changed files with 45 additions and 252 deletions.
24 changes: 0 additions & 24 deletions Ice.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,6 @@
1725FC6A2AED973800A59081 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1725FC692AED973800A59081 /* AppState.swift */; };
172778482C1490EA00F6F687 /* EventTap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 172778472C1490EA00F6F687 /* EventTap.swift */; };
1727786E2C15181300F6F687 /* MenuBarItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1727786D2C15181300F6F687 /* MenuBarItemManager.swift */; };
172D827A2BC1F29E0048DD88 /* AccessibilityMenuBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 172D82792BC1F29E0048DD88 /* AccessibilityMenuBar.swift */; };
172D827C2BC1F2C10048DD88 /* AccessibilityError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 172D827B2BC1F2C10048DD88 /* AccessibilityError.swift */; };
172D827E2BC1F2E70048DD88 /* AccessibilityMenuBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 172D827D2BC1F2E70048DD88 /* AccessibilityMenuBarItem.swift */; };
172D82802BC1F3270048DD88 /* AccessibilityApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = 172D827F2BC1F3270048DD88 /* AccessibilityApplication.swift */; };
1736F77C2ADBBF340073428E /* CustomGradientPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1736F77B2ADBBF340073428E /* CustomGradientPicker.swift */; };
1736F7802ADBC02B0073428E /* CustomGradient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1736F77F2ADBC02B0073428E /* CustomGradient.swift */; };
1737E3E52BA3C4AA009F0EFA /* HotkeyAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1737E3E42BA3C4AA009F0EFA /* HotkeyAction.swift */; };
Expand Down Expand Up @@ -148,10 +144,6 @@
1726A3F82B3378B8008B09DD /* Acknowledgements.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Acknowledgements.rtf; sourceTree = "<group>"; };
172778472C1490EA00F6F687 /* EventTap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventTap.swift; sourceTree = "<group>"; };
1727786D2C15181300F6F687 /* MenuBarItemManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarItemManager.swift; sourceTree = "<group>"; };
172D82792BC1F29E0048DD88 /* AccessibilityMenuBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityMenuBar.swift; sourceTree = "<group>"; };
172D827B2BC1F2C10048DD88 /* AccessibilityError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityError.swift; sourceTree = "<group>"; };
172D827D2BC1F2E70048DD88 /* AccessibilityMenuBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityMenuBarItem.swift; sourceTree = "<group>"; };
172D827F2BC1F3270048DD88 /* AccessibilityApplication.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityApplication.swift; sourceTree = "<group>"; };
1736F77B2ADBBF340073428E /* CustomGradientPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomGradientPicker.swift; sourceTree = "<group>"; };
1736F77F2ADBC02B0073428E /* CustomGradient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomGradient.swift; sourceTree = "<group>"; };
1737E3E42BA3C4AA009F0EFA /* HotkeyAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HotkeyAction.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -338,17 +330,6 @@
name = Frameworks;
sourceTree = "<group>";
};
172D82782BC1F2950048DD88 /* Accessibility */ = {
isa = PBXGroup;
children = (
172D827B2BC1F2C10048DD88 /* AccessibilityError.swift */,
172D82792BC1F29E0048DD88 /* AccessibilityMenuBar.swift */,
172D827F2BC1F3270048DD88 /* AccessibilityApplication.swift */,
172D827D2BC1F2E70048DD88 /* AccessibilityMenuBarItem.swift */,
);
path = Accessibility;
sourceTree = "<group>";
};
1736F7762ADBBEF10073428E /* CustomGradientPicker */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -669,7 +650,6 @@
7166832C2A767E6A006ABF84 /* Ice */ = {
isa = PBXGroup;
children = (
172D82782BC1F2950048DD88 /* Accessibility */,
17CDCACA2C2E6F3D000B1CFF /* Bridging */,
177386F62B0A656100448BBF /* ControlItem */,
17147FBE2B99513200C4A435 /* Events */,
Expand Down Expand Up @@ -895,7 +875,6 @@
71FEA2542A8D701B0048341A /* LocalEventMonitor.swift in Sources */,
7150A7AF2AA426C60045EA68 /* HotkeyRegistry.swift in Sources */,
7162406F2AA0A323003EC671 /* MenuBarSection.swift in Sources */,
172D827A2BC1F29E0048DD88 /* AccessibilityMenuBar.swift in Sources */,
177386F52B0A654D00448BBF /* ControlItemImageSet.swift in Sources */,
17CDCACF2C2E6F77000B1CFF /* Private.swift in Sources */,
17BE3DE02C1A705E008B98EF /* IceBarPanel+hasKeyAppearance.swift in Sources */,
Expand Down Expand Up @@ -942,15 +921,13 @@
176B23F42ADB76A1008AE86B /* CustomColorPicker.swift in Sources */,
17CDCAD12C2E6FB0000B1CFF /* Bridging.swift in Sources */,
17540BD82B20C0DA00A0F965 /* NSBezierPath+drawShadow.swift in Sources */,
172D827C2BC1F2C10048DD88 /* AccessibilityError.swift in Sources */,
177354842B1F9AF9001CF731 /* NSBezierPath+union.swift in Sources */,
172778482C1490EA00F6F687 /* EventTap.swift in Sources */,
17540BDC2B23BD5700A0F965 /* NSBezierPath+intersects.swift in Sources */,
17F998512C16D02E00D75EC0 /* LayoutBarScrollView.swift in Sources */,
179AC2FC2C1146EF0051E7B0 /* RemoveSidebarToggle.swift in Sources */,
17B7F32B2B264C1800CDCF49 /* MenuBarAppearanceManager.swift in Sources */,
17F9984D2C16CD8E00D75EC0 /* MenuBarItemsSettingsPane.swift in Sources */,
172D827E2BC1F2E70048DD88 /* AccessibilityMenuBarItem.swift in Sources */,
17D1AC8D2B97BB5900726180 /* MenuBarItem.swift in Sources */,
173C248C2B8E821C0096F7A1 /* UpdatesSettingsPane.swift in Sources */,
171C6F9C2C0356BC0097A5C8 /* GeneralSettingsPane.swift in Sources */,
Expand Down Expand Up @@ -1004,7 +981,6 @@
175812542B80FBFA00D622DA /* MenuBarAppearanceEditorPanel.swift in Sources */,
17CDCAD42C2E8A04000B1CFF /* CGError+logString.swift in Sources */,
7166832E2A767E6A006ABF84 /* IceApp.swift in Sources */,
172D82802BC1F3270048DD88 /* AccessibilityApplication.swift in Sources */,
17C3C5F72B75A36100B9648C /* NSScreen+displayID.swift in Sources */,
7133ED5E2A853FCF000A7E1B /* Constants.swift in Sources */,
17F9984B2C16CBC100D75EC0 /* LayoutBar.swift in Sources */,
Expand Down
41 changes: 0 additions & 41 deletions Ice/Accessibility/AccessibilityApplication.swift

This file was deleted.

20 changes: 0 additions & 20 deletions Ice/Accessibility/AccessibilityError.swift

This file was deleted.

95 changes: 0 additions & 95 deletions Ice/Accessibility/AccessibilityMenuBar.swift

This file was deleted.

52 changes: 0 additions & 52 deletions Ice/Accessibility/AccessibilityMenuBarItem.swift

This file was deleted.

2 changes: 1 addition & 1 deletion Ice/Events/EventManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ extension EventManager {
let mouseLocation = MouseCursor.location(flipped: true),
let screen = bestScreen,
let appState,
let applicationMenuFrame = try? appState.menuBarManager.getApplicationMenuFrame(for: screen.displayID)
let applicationMenuFrame = appState.menuBarManager.getApplicationMenuFrame(for: screen.displayID)
else {
return false
}
Expand Down
52 changes: 41 additions & 11 deletions Ice/MenuBar/MenuBarManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// Ice
//

import AXSwift
import Combine
import OSLog
import SwiftUI
Expand Down Expand Up @@ -199,7 +200,7 @@ final class MenuBarManager: ObservableObject {
let displayID = screen.displayID

// get the application menu frame for the display
guard let applicationMenuFrame = try? getApplicationMenuFrame(for: displayID) else {
guard let applicationMenuFrame = getApplicationMenuFrame(for: displayID) else {
return
}

Expand Down Expand Up @@ -281,20 +282,49 @@ final class MenuBarManager: ObservableObject {
}
}

/// Returns a Boolean value that indicates whether the given display
/// has a valid menu bar.
func hasValidMenuBar(for display: CGDirectDisplayID) -> Bool {
guard let menuBarWindow = WindowInfo.getMenuBarWindow(for: display) else {
return false
}
let position = menuBarWindow.frame.origin
do {
let uiElement = try systemWideElement.elementAtPosition(Float(position.x), Float(position.y))
return try uiElement?.role() == .menuBar
} catch {
return false
}
}

/// Returns the frame of the application menu for the given display.
func getApplicationMenuFrame(for display: CGDirectDisplayID) throws -> CGRect {
let menuBar = try AccessibilityMenuBar(display: display)
var menuBarFrame = try menuBar.frame()
menuBarFrame.origin = CGDisplayBounds(display).origin
menuBarFrame.size.width = try menuBar.menuBarItems().reduce(into: 0) { width, item in
if item.isEnabled {
try width += item.frame().width
}
func getApplicationMenuFrame(for display: CGDirectDisplayID) -> CGRect? {
let displayBounds = CGDisplayBounds(display)
guard
let menuBar = try? systemWideElement.elementAtPosition(
Float(displayBounds.origin.x),
Float(displayBounds.origin.y)
),
(try? menuBar.role()) == .menuBar,
var menuBarFrame: CGRect = try? menuBar.attribute(.frame),
let items: [UIElement] = try? menuBar.arrayAttribute(.children)
else {
return nil
}
menuBarFrame.origin = displayBounds.origin
menuBarFrame.size.width = items.lazy
.filter { item in
(try? item.attribute(.enabled)) == true
}
.reduce(into: 0) { width, item in
if let frame: CGRect = try? item.attribute(.frame) {
width += frame.width
}
}
if menuBarFrame.width == .zero {
return menuBarFrame
return nil
}
menuBarFrame.size.width += 15 // extra width to accomodate menu bar item padding
menuBarFrame.size.width += 15 // extra width to accomodate menu padding
return menuBarFrame
}

Expand Down
Loading

0 comments on commit 5514bad

Please sign in to comment.