bd44b5aa08
Test / build-libghostty-vt (x86_64-windows-gnu) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-ios) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt-macos (x86_64-macos) (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-dist (push) Has been cancelled
Test / GTK x11=true wayland=true (push) Has been cancelled
Test / Build -Dsimd=false (push) Has been cancelled
Test / Build -Dsimd=true (push) Has been cancelled
Test / Build -Dsentry=false (push) Has been cancelled
Test / Build -Dsentry=true (push) Has been cancelled
Test / zig-fmt (push) Has been cancelled
Test / GitHub Actions Pins (push) Has been cancelled
Test / prettier (push) Has been cancelled
Test / swiftlint (push) Has been cancelled
Test / alejandra (push) Has been cancelled
Test / typos (push) Has been cancelled
Nix / Required Checks: Nix (push) Has been cancelled
Nix / check-zig-cache-hash (push) Has been cancelled
Test / skip (push) Has been cancelled
Test / Required Checks: Test (push) Has been cancelled
Test / build-bench (push) Has been cancelled
Test / list-examples (push) Has been cancelled
Test / Example ${{ matrix.dir }} (Windows) (push) Has been cancelled
Test / build-cmake (push) Has been cancelled
Test / test-lib-vt-pkgconfig (push) Has been cancelled
Test / build-flatpak (push) Has been cancelled
Test / build-snap (push) Has been cancelled
Test / build-libghostty-vt (aarch64-linux) (push) Has been cancelled
Test / build-libghostty-vt (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt (wasm32-freestanding) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux-musl) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-macos) (push) Has been cancelled
Test / build-libghostty-vt-android (aarch64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-android (arm-linux-androideabi) (push) Has been cancelled
Test / build-libghostty-vt-android (x86_64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-windows (push) Has been cancelled
Test / build-libghostty-windows-gnu (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-linux-libghostty (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-dist-lib-vt (push) Has been cancelled
Test / trigger-snap (push) Has been cancelled
Test / trigger-flatpak (push) Has been cancelled
Test / build-macos (push) Has been cancelled
Test / build-macos-freetype (push) Has been cancelled
Test / test (push) Has been cancelled
Test / test-lib-vt (push) Has been cancelled
Test / GTK x11=false wayland=false (push) Has been cancelled
Test / GTK x11=true wayland=false (push) Has been cancelled
Test / GTK x11=false wayland=true (push) Has been cancelled
Test / test-macos (push) Has been cancelled
Test / test-windows (push) Has been cancelled
Test / Build -Di18n=false (push) Has been cancelled
Test / Build -Di18n=true (push) Has been cancelled
Test / Build test/fuzz-libghostty (push) Has been cancelled
Test / shellcheck (push) Has been cancelled
Test / translations (push) Has been cancelled
Test / blueprint-compiler (push) Has been cancelled
Test / Test pkg/wuffs (push) Has been cancelled
Test / Test build on Debian 13 (push) Has been cancelled
Test / valgrind (push) Has been cancelled
Test / Example ${{ matrix.dir }} (push) Has been cancelled
82 lines
2.5 KiB
Swift
82 lines
2.5 KiB
Swift
import AppKit
|
|
|
|
// MARK: - CGS Private API Declarations
|
|
|
|
typealias CGSConnectionID = Int32
|
|
typealias CGSSpaceID = size_t
|
|
|
|
@_silgen_name("CGSMainConnectionID")
|
|
private func CGSMainConnectionID() -> CGSConnectionID
|
|
|
|
@_silgen_name("CGSGetActiveSpace")
|
|
private func CGSGetActiveSpace(_ cid: CGSConnectionID) -> CGSSpaceID
|
|
|
|
@_silgen_name("CGSSpaceGetType")
|
|
private func CGSSpaceGetType(_ cid: CGSConnectionID, _ spaceID: CGSSpaceID) -> CGSSpaceType
|
|
|
|
@_silgen_name("CGSCopySpacesForWindows")
|
|
func CGSCopySpacesForWindows(
|
|
_ cid: CGSConnectionID,
|
|
_ mask: CGSSpaceMask,
|
|
_ windowIDs: CFArray
|
|
) -> Unmanaged<CFArray>?
|
|
|
|
// MARK: - CGS Space
|
|
|
|
/// https://github.com/NUIKit/CGSInternal/blob/c4f6f559d624dc1cfc2bf24c8c19dbf653317fcf/CGSSpace.h#L40
|
|
/// converted to Swift
|
|
struct CGSSpaceMask: OptionSet {
|
|
let rawValue: UInt32
|
|
|
|
static let includesCurrent = CGSSpaceMask(rawValue: 1 << 0)
|
|
static let includesOthers = CGSSpaceMask(rawValue: 1 << 1)
|
|
static let includesUser = CGSSpaceMask(rawValue: 1 << 2)
|
|
|
|
static let includesVisible = CGSSpaceMask(rawValue: 1 << 16)
|
|
|
|
static let currentSpace: CGSSpaceMask = [.includesUser, .includesCurrent]
|
|
static let otherSpaces: CGSSpaceMask = [.includesOthers, .includesCurrent]
|
|
static let allSpaces: CGSSpaceMask = [.includesUser, .includesOthers, .includesCurrent]
|
|
static let allVisibleSpaces: CGSSpaceMask = [.includesVisible, .allSpaces]
|
|
}
|
|
|
|
/// Represents a unique identifier for a macOS Space (Desktop, Fullscreen, etc).
|
|
struct CGSSpace: Hashable, CustomStringConvertible {
|
|
let rawValue: CGSSpaceID
|
|
|
|
var description: String {
|
|
"SpaceID(\(rawValue))"
|
|
}
|
|
|
|
/// Returns the currently active space.
|
|
static func active() -> CGSSpace {
|
|
let space = CGSGetActiveSpace(CGSMainConnectionID())
|
|
return .init(rawValue: space)
|
|
}
|
|
|
|
/// List the spaces for the given window.
|
|
static func list(for windowID: CGWindowID, mask: CGSSpaceMask = .allSpaces) -> [CGSSpace] {
|
|
guard let spaces = CGSCopySpacesForWindows(
|
|
CGSMainConnectionID(),
|
|
mask,
|
|
[windowID] as CFArray
|
|
) else { return [] }
|
|
guard let spaceIDs = spaces.takeRetainedValue() as? [CGSSpaceID] else { return [] }
|
|
return spaceIDs.map(CGSSpace.init)
|
|
}
|
|
}
|
|
|
|
// MARK: - CGS Space Types
|
|
|
|
enum CGSSpaceType: UInt32 {
|
|
case user = 0
|
|
case system = 2
|
|
case fullscreen = 4
|
|
}
|
|
|
|
extension CGSSpace {
|
|
var type: CGSSpaceType {
|
|
CGSSpaceGetType(CGSMainConnectionID(), rawValue)
|
|
}
|
|
}
|