mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-25 03:45:46 -06:00
ae55a4090c
* refactor(canvas): retire legacy host and commands * refactor(apple): narrow shared Canvas contracts * refactor(macos): keep Canvas as widget presenter * refactor(ios): remove Canvas client * refactor(android): remove Canvas client * refactor(linux): remove Canvas client * fix(ci): isolate native locale artifacts * fix(linux): regenerate companion lockfile * fix(canvas): refresh native tool display metadata * test(canvas): align coverage with presenter surface * test(canvas): remove obsolete asset root seam * test(canvas): stabilize retirement CI coverage * refactor(swift): remove orphaned resource wrapper * test(ios): remove retired canvas layout assertion * fix(macos): reserve retired canvas command namespace * refactor(macos): isolate canvas command policy * fix(canvas): select only eligible macOS panels * fix(canvas): keep panel selection plugin-owned
34 lines
1.4 KiB
Swift
34 lines
1.4 KiB
Swift
import AppKit
|
|
import Foundation
|
|
|
|
extension CanvasWindowController {
|
|
// MARK: - Helpers
|
|
|
|
static func sanitizeSessionKey(_ key: String) -> String {
|
|
let trimmed = key.trimmingCharacters(in: .whitespacesAndNewlines)
|
|
if trimmed.isEmpty { return "main" }
|
|
let allowed = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+")
|
|
let scalars = trimmed.unicodeScalars.map { allowed.contains($0) ? Character($0) : "_" }
|
|
return String(scalars)
|
|
}
|
|
|
|
static func storedFrameDefaultsKey(sessionKey: String) -> String {
|
|
"openclaw.canvas.frame.\(self.sanitizeSessionKey(sessionKey))"
|
|
}
|
|
|
|
static func loadRestoredFrame(sessionKey: String) -> NSRect? {
|
|
let key = self.storedFrameDefaultsKey(sessionKey: sessionKey)
|
|
guard let arr = AppDefaults.standard.array(forKey: key) as? [Double], arr.count == 4 else { return nil }
|
|
let rect = NSRect(x: arr[0], y: arr[1], width: arr[2], height: arr[3])
|
|
if rect.width < CanvasLayout.minPanelSize.width || rect.height < CanvasLayout.minPanelSize.height { return nil }
|
|
return rect
|
|
}
|
|
|
|
static func storeRestoredFrame(_ frame: NSRect, sessionKey: String) {
|
|
let key = self.storedFrameDefaultsKey(sessionKey: sessionKey)
|
|
AppDefaults.standard.set(
|
|
[Double(frame.origin.x), Double(frame.origin.y), Double(frame.size.width), Double(frame.size.height)],
|
|
forKey: key)
|
|
}
|
|
}
|