From 19d25b32dbf8948a319483e70a1be894ef1f1bd0 Mon Sep 17 00:00:00 2001 From: decodism Date: Wed, 25 Jan 2023 02:08:03 +0100 Subject: [PATCH] Sync status item removal by dragging with settings --- Rectangle/PrefsWindow/SettingsViewController.swift | 4 ++++ Rectangle/RectangleStatusItem.swift | 10 ++++++++-- Rectangle/Utilities/NotificationExtension.swift | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Rectangle/PrefsWindow/SettingsViewController.swift b/Rectangle/PrefsWindow/SettingsViewController.swift index 00e830e71..6b0b894db 100644 --- a/Rectangle/PrefsWindow/SettingsViewController.swift +++ b/Rectangle/PrefsWindow/SettingsViewController.swift @@ -174,6 +174,10 @@ class SettingsViewController: NSViewController { self.initializeTodoModeSettings() self.initializeToggles() }) + + Notification.Name.menuBarIconHidden.onPost(using: {_ in + self.hideMenuBarIconCheckbox.state = .on + }) } func initializeTodoModeSettings() { diff --git a/Rectangle/RectangleStatusItem.swift b/Rectangle/RectangleStatusItem.swift index 3748326e7..139ba3b3c 100644 --- a/Rectangle/RectangleStatusItem.swift +++ b/Rectangle/RectangleStatusItem.swift @@ -18,6 +18,7 @@ class RectangleStatusItem { nsStatusItem?.menu = statusMenu } } + private var isVisibleObserver: NSKeyValueObservation? private init() {} @@ -42,9 +43,14 @@ class RectangleStatusItem { nsStatusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) nsStatusItem?.menu = self.statusMenu nsStatusItem?.button?.image = NSImage(named: "StatusTemplate") - if #available(OSX 10.12, *) { - nsStatusItem?.behavior = .removalAllowed + nsStatusItem?.behavior = .removalAllowed + isVisibleObserver = nsStatusItem?.observe(\.isVisible, options: [.old, .new]) { nsStatusItem, change in + if change.oldValue == true && change.newValue == false { + Notification.Name.menuBarIconHidden.post() + Defaults.hideMenuBarIcon.enabled = true + } } + nsStatusItem?.isVisible = true } private func remove() { diff --git a/Rectangle/Utilities/NotificationExtension.swift b/Rectangle/Utilities/NotificationExtension.swift index 7e7b27cf2..4e7286630 100644 --- a/Rectangle/Utilities/NotificationExtension.swift +++ b/Rectangle/Utilities/NotificationExtension.swift @@ -18,6 +18,7 @@ extension Notification.Name { static let todoMenuToggled = Notification.Name("todoMenuToggled") static let appWillBecomeActive = Notification.Name("appWillBecomeActive") static let missionControlDragging = Notification.Name("missionControlDragging") + static let menuBarIconHidden = Notification.Name("menuBarIconHidden") func post( center: NotificationCenter = NotificationCenter.default,