feat: added widget position restore when enabling/disabling the module

This commit is contained in:
Serhiy Mytrovtsiy
2022-09-09 19:10:49 +02:00
parent a9ba0aae29
commit 347b606972
2 changed files with 19 additions and 0 deletions

View File

@@ -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)")
}
}

View File

@@ -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
}