diff --git a/AKPlugin.swift b/AKPlugin.swift index 063e7b3b..296fab66 100644 --- a/AKPlugin.swift +++ b/AKPlugin.swift @@ -12,26 +12,29 @@ import Foundation // Add a lightweight struct so we can decode only the flag we care about private struct AKAppSettingsData: Codable { var hideTitleBar: Bool? + var floatingWindow: Bool? } class AKPlugin: NSObject, Plugin { required override init() { super.init() - if hideTitleBarSetting == false { - return - } if let window = NSApplication.shared.windows.first { - // Enable all window management features - window.styleMask.insert([.resizable, .fullSizeContentView]) + window.styleMask.insert([.resizable]) window.collectionBehavior = [.fullScreenPrimary, .managed, .participatesInCycle] - - // Enable automatic window management window.isMovable = true window.isMovableByWindowBackground = true - window.titlebarAppearsTransparent = true - window.titleVisibility = .hidden - window.toolbar = nil - window.title = "" + + if self.hideTitleBarSetting == true { + window.styleMask.insert([.fullSizeContentView]) + window.titlebarAppearsTransparent = true + window.titleVisibility = .hidden + window.toolbar = nil + window.title = "" + } + + if self.floatingWindowSetting == true { + window.level = .floating + } NSWindow.allowsAutomaticWindowTabbing = true } @@ -40,12 +43,20 @@ class AKPlugin: NSObject, Plugin { forName: NSWindow.didBecomeKeyNotification, object: nil, queue: .main) { notif in - guard let win = notif.object as? NSWindow else { return } - win.styleMask.insert([.resizable, .fullSizeContentView]) - win.titlebarAppearsTransparent = true - win.titleVisibility = .hidden - win.toolbar = nil - win.title = "" + guard let win = notif.object as? NSWindow else { return } + win.styleMask.insert([.resizable]) + + if self.hideTitleBarSetting == true { + win.styleMask.insert([.fullSizeContentView]) + win.titlebarAppearsTransparent = true + win.titleVisibility = .hidden + win.toolbar = nil + win.title = "" + } + + if self.floatingWindowSetting == true { + win.level = .floating + } } } @@ -265,17 +276,18 @@ class AKPlugin: NSObject, Plugin { } /// Convenience instance property that exposes the cached static preference. - private var hideTitleBarSetting: Bool { Self.hideTitleBarPreference } + private var hideTitleBarSetting: Bool { Self.akAppSettingsData?.hideTitleBar ?? false } + private var floatingWindowSetting: Bool { Self.akAppSettingsData?.floatingWindow ?? false } - fileprivate static var hideTitleBarPreference: Bool = { + fileprivate static var akAppSettingsData: AKAppSettingsData? = { let bundleIdentifier = Bundle.main.bundleIdentifier ?? "" let settingsURL = URL(fileURLWithPath: "/Users/\(NSUserName())/Library/Containers/io.playcover.PlayCover") .appendingPathComponent("App Settings") .appendingPathComponent("\(bundleIdentifier).plist") guard let data = try? Data(contentsOf: settingsURL), let decoded = try? PropertyListDecoder().decode(AKAppSettingsData.self, from: data) else { - return false + return nil } - return decoded.hideTitleBar ?? false + return decoded }() } diff --git a/PlayTools/PlaySettings.swift b/PlayTools/PlaySettings.swift index 513bd0d1..d3c1e30c 100644 --- a/PlayTools/PlaySettings.swift +++ b/PlayTools/PlaySettings.swift @@ -84,6 +84,8 @@ let settings = PlaySettings.shared @objc lazy var hideTitleBar = settingsData.hideTitleBar + @objc lazy var floatingWindow = settingsData.floatingWindow + @objc lazy var checkMicPermissionSync = settingsData.checkMicPermissionSync } @@ -110,5 +112,6 @@ struct AppSettingsData: Codable { var noKMOnInput = false var enableScrollWheel = true var hideTitleBar = false + var floatingWindow = false var checkMicPermissionSync = false }