From 6800ff919c8bf5a5fb9ef8da8a4c7c100c24bde4 Mon Sep 17 00:00:00 2001 From: Grzegorz Milka Date: Wed, 31 May 2023 19:03:44 +0200 Subject: [PATCH] fix: retain managed display spaces This fixes a memory leak. CGSCopyManagedDisplaySpaces returns an unmanaged object reference, so we need to retain it to ensure it's properly cleaned up. --- Spaceman/Helpers/SpaceObserver.swift | 2 +- Spaceman/Spaceman-Bridging-Header.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Spaceman/Helpers/SpaceObserver.swift b/Spaceman/Helpers/SpaceObserver.swift index ac2e23b2..65b3c44f 100644 --- a/Spaceman/Helpers/SpaceObserver.swift +++ b/Spaceman/Helpers/SpaceObserver.swift @@ -28,7 +28,7 @@ class SpaceObserver { } @objc public func updateSpaceInformation() { - let displays = CGSCopyManagedDisplaySpaces(conn) as! [NSDictionary] + let displays = CGSCopyManagedDisplaySpaces(conn)!.takeRetainedValue() as! [NSDictionary] var activeSpaceID = -1 var spacesIndex = 0 var allSpaces = [Space]() diff --git a/Spaceman/Spaceman-Bridging-Header.h b/Spaceman/Spaceman-Bridging-Header.h index 9eb0ac38..3a76aefc 100644 --- a/Spaceman/Spaceman-Bridging-Header.h +++ b/Spaceman/Spaceman-Bridging-Header.h @@ -11,7 +11,7 @@ #import int _CGSDefaultConnection(); -id CGSCopyManagedDisplaySpaces(int conn); +CFArrayRef CGSCopyManagedDisplaySpaces(int conn); id CGSCopyActiveMenuBarDisplayIdentifier(int conn); #endif /* Spaceman_Bridging_Header_h */