diff --git a/Kit/helpers.swift b/Kit/helpers.swift index c26e06c9..efb6f71b 100644 --- a/Kit/helpers.swift +++ b/Kit/helpers.swift @@ -1118,3 +1118,17 @@ public class EmptyView: NSStackView { fatalError("init(coder:) has not been implemented") } } + +public func saveNSStatusItemPosition(id: String) { + let position = Store.shared.int(key: "NSStatusItem Preferred Position \(id)", defaultValue: -1) + if position != -1 { + Store.shared.set(key: "NSStatusItem Restore Position \(id)", value: position) + } +} +public func restoreNSStatusItemPosition(id: String) { + let prevPosition = Store.shared.int(key: "NSStatusItem Restore Position \(id)", defaultValue: -1) + if prevPosition != -1 { + Store.shared.set(key: "NSStatusItem Preferred Position \(id)", value: prevPosition) + Store.shared.remove("NSStatusItem Restore Position \(id)") + } +} diff --git a/Kit/module/widget.swift b/Kit/module/widget.swift index cc55aaf4..51560ff3 100644 --- a/Kit/module/widget.swift +++ b/Kit/module/widget.swift @@ -293,6 +293,8 @@ public class Widget { Store.shared.remove(prevTag) } + restoreNSStatusItemPosition(id: "\(self.module)_\(self.type.rawValue)") + DispatchQueue.main.async(execute: { self.menuBarItem = NSStatusBar.system.statusItem(withLength: self.item.frame.width) self.menuBarItem?.autosaveName = "\(self.module)_\(self.type.rawValue)" @@ -310,6 +312,7 @@ public class Widget { self.menuBarItem?.button?.sendAction(on: [.leftMouseDown, .rightMouseDown]) }) } else if let item = self.menuBarItem { + saveNSStatusItemPosition(id: "\(self.module)_\(self.type.rawValue)") NSStatusBar.system.removeStatusItem(item) self.menuBarItem = nil } @@ -402,6 +405,7 @@ public class MenuBar { private func setupMenuBarItem(_ state: Bool) { if state { + restoreNSStatusItemPosition(id: self.moduleName) self.menuBarItem = NSStatusBar.system.statusItem(withLength: 0) self.menuBarItem?.autosaveName = self.moduleName self.menuBarItem?.isVisible = true @@ -411,6 +415,7 @@ public class MenuBar { self.menuBarItem?.button?.action = #selector(self.togglePopup) self.menuBarItem?.button?.sendAction(on: [.leftMouseDown, .rightMouseDown]) } else if let item = self.menuBarItem { + saveNSStatusItemPosition(id: self.moduleName) NSStatusBar.system.removeStatusItem(item) self.menuBarItem = nil }