Skip to content
This repository was archived by the owner on Jun 26, 2023. It is now read-only.

Commit ba9d0ad

Browse files
committed
Alright Apple, your WYSIWYG menu is there
1 parent 5ccc96c commit ba9d0ad

File tree

4 files changed

+51
-3
lines changed

4 files changed

+51
-3
lines changed

Dynamic/Utilities/Preferences.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ extension UserDefaults {
230230
}
231231
}
232232

233-
var rawSettingsStyle: Int {
233+
@objc dynamic var rawSettingsStyle: Int {
234234
get {
235235
return preferences.integer(forKey: #function)
236236
}

Dynamic/View Controller/AppDelegate.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import LetsMove
1818
class AppDelegate: NSObject, NSApplicationDelegate {
1919
private lazy var statusBarItem = NSStatusBar.system
2020
.statusItem(withLength: NSStatusItem.squareLength)
21+
private var token: NSKeyValueObservation?
2122

2223
func applicationDidFinishLaunching(_ aNotification: Notification) {
2324
#if canImport(LetsMove) && !DEBUG
@@ -35,6 +36,15 @@ class AppDelegate: NSObject, NSApplicationDelegate {
3536
statusBarItem.button?.image = #imageLiteral(resourceName: "status_bar_icon")
3637
statusBarItem.button?.sendAction(on: [.leftMouseUp, .rightMouseUp])
3738
statusBarItem.button?.action = #selector(handleEvent)
39+
token = preferences.observe(\.rawSettingsStyle, options: [.initial, .new])
40+
{ [weak self] _, change in
41+
guard let self = self else { return }
42+
if change.newValue == 1 {
43+
self.statusBarItem.menu = self.buildMenu()
44+
} else {
45+
self.statusBarItem.menu = nil
46+
}
47+
}
3848

3949
DispatchQueue.global(qos: .userInteractive).async(execute: setup)
4050
DispatchQueue.global(qos: .userInitiated).async(execute: setupTouchBar)
@@ -48,6 +58,42 @@ class AppDelegate: NSObject, NSApplicationDelegate {
4858
}
4959
}
5060

61+
func buildMenu() -> NSMenu {
62+
let menu = NSMenu()
63+
let toggleItem = NSMenuItem(
64+
title: NSLocalizedString(
65+
"Menu.toggle",
66+
value: "Toggle Dark Mode",
67+
comment: "Action item to toggle in from menu bar"),
68+
action: #selector(toggleInterfaceStyle),
69+
keyEquivalent: "\u{000d}" // return
70+
)
71+
menu.addItem(toggleItem)
72+
menu.addItem(.separator())
73+
let preferencesItem = NSMenuItem(
74+
title: NSLocalizedString(
75+
"Menu.preferences",
76+
value: "Preferences…",
77+
comment: "Settings"),
78+
action: #selector(SettingsViewController.show),
79+
keyEquivalent: ","
80+
)
81+
preferencesItem.keyEquivalentModifierMask = .command
82+
preferencesItem.target = SettingsViewController.self
83+
menu.addItem(preferencesItem)
84+
let quitItem = NSMenuItem(
85+
title: NSLocalizedString(
86+
"Menu.quit",
87+
value: "Quit",
88+
comment: "Use system translation for quit"),
89+
action: #selector(NSApplication.terminate(_:)),
90+
keyEquivalent: "Q"
91+
)
92+
quitItem.keyEquivalentModifierMask = .command
93+
menu.addItem(quitItem)
94+
return menu
95+
}
96+
5197
// MARK: - Control Strip Setup
5298

5399
private func setupTouchBar() {
@@ -80,6 +126,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
80126
}
81127

82128
func applicationWillTerminate(_ notification: Notification) {
129+
token?.invalidate()
83130
Preferences.removeObservers()
84131
Scheduler.shared.cancel()
85132
}

Dynamic/View Controller/Base.lproj/Main.storyboard

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -897,7 +897,7 @@ DQ
897897
<subviews>
898898
<button verticalHuggingPriority="750" tag="1" translatesAutoresizingMaskIntoConstraints="NO" id="Ik9-Rl-d1Q">
899899
<rect key="frame" x="-1" y="21" width="433" height="18"/>
900-
<buttonCell key="cell" type="radio" title="Left click on the menu bar icon to show menu, then choose Settings" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="EJk-BY-RUI">
900+
<buttonCell key="cell" type="radio" title="Left click on the menu bar icon to show menu, then choose Settings" bezelStyle="regularSquare" imagePosition="left" alignment="left" tag="1" inset="2" id="EJk-BY-RUI">
901901
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
902902
<font key="font" metaFont="system"/>
903903
</buttonCell>

Dynamic/View Controller/Settings/SettingsViewController.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class SettingsViewController: NSViewController {
1919
case menu
2020
}
2121
private static weak var window: NSWindow? = nil
22-
public static func show() {
22+
@objc public static func show() {
2323
if window == nil {
2424
ValueTransformer.setValueTransformer(
2525
UsesCustomRange(), forName: .usesCustomRangeTransformerName
@@ -79,5 +79,6 @@ extension Preferences {
7979
preferences.scheduleZenithType = .official
8080
preferences.scheduled = true
8181
preferences.opensAtLogin = true
82+
preferences.settingsStyle = .rightClick
8283
}
8384
}

0 commit comments

Comments
 (0)