diff --git a/MTMR/AppDelegate.swift b/MTMR/AppDelegate.swift
index d6adfe5..08932de 100644
--- a/MTMR/AppDelegate.swift
+++ b/MTMR/AppDelegate.swift
@@ -25,6 +25,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
AXIsProcessTrustedWithOptions([kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true] as NSDictionary)
TouchBarController.shared.setupControlStripPresence()
+ HapticFeedbackUpdate()
if let button = statusItem.button {
button.image = #imageLiteral(resourceName: "StatusImage")
@@ -40,6 +41,10 @@ class AppDelegate: NSObject, NSApplicationDelegate {
func applicationWillTerminate(_: Notification) {}
+ func HapticFeedbackUpdate() {
+ HapticFeedback.shared = TouchBarController.shared.hapticFeedbackState ? HapticFeedback() : nil
+ }
+
@objc func updateIsBlockedApp() {
var blacklistAppIdentifiers: [String] = []
if let blackListed = UserDefaults.standard.stringArray(forKey: "com.toxblh.mtmr.blackListedApps") {
@@ -90,6 +95,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
}
}
+ @objc func toggleHapticFeedback(_: Any?) {
+ TouchBarController.shared.hapticFeedbackState = !TouchBarController.shared.hapticFeedbackState
+ HapticFeedbackUpdate()
+ createMenu()
+ }
+
@objc func openPreset(_: Any?) {
let dialog = NSOpenPanel()
@@ -124,6 +135,9 @@ class AppDelegate: NSObject, NSApplicationDelegate {
let hideControlStrip = NSMenuItem(title: "Hide Control Strip", action: #selector(toggleControlStrip(_:)), keyEquivalent: "T")
hideControlStrip.state = TouchBarController.shared.showControlStripState ? .off : .on
+ let hapticFeedback = NSMenuItem(title: "Haptic Feedback", action: #selector(toggleHapticFeedback(_:)), keyEquivalent: "H")
+ hapticFeedback.state = TouchBarController.shared.hapticFeedbackState ? .on : .off
+
let settingSeparator = NSMenuItem(title: "Settings", action: nil, keyEquivalent: "")
settingSeparator.isEnabled = false
@@ -133,6 +147,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
menu.addItem(NSMenuItem.separator())
menu.addItem(settingSeparator)
+ menu.addItem(hapticFeedback)
menu.addItem(hideControlStrip)
menu.addItem(toggleBlackList)
menu.addItem(startAtLogin)
diff --git a/MTMR/CustomButtonTouchBarItem.swift b/MTMR/CustomButtonTouchBarItem.swift
index 238d0cd..5ae98de 100644
--- a/MTMR/CustomButtonTouchBarItem.swift
+++ b/MTMR/CustomButtonTouchBarItem.swift
@@ -176,12 +176,12 @@ class CustomButtonCell: NSButtonCell {
class HapticClickGestureRecognizer: NSClickGestureRecognizer {
override func touchesBegan(with event: NSEvent) {
- HapticFeedback.shared.tap(strong: 2)
+ HapticFeedback.shared?.tap(strong: 2)
super.touchesBegan(with: event)
}
override func touchesEnded(with event: NSEvent) {
- HapticFeedback.shared.tap(strong: 1)
+ HapticFeedback.shared?.tap(strong: 1)
super.touchesEnded(with: event)
}
}
@@ -226,7 +226,7 @@ class LongPressGestureRecognizer: NSPressGestureRecognizer {
@objc private func onTimer() {
if let target = self.target, let action = self.action {
target.performSelector(onMainThread: action, with: self, waitUntilDone: false)
- HapticFeedback.shared.tap(strong: 6)
+ HapticFeedback.shared?.tap(strong: 6)
}
}
diff --git a/MTMR/HapticFeedback.swift b/MTMR/HapticFeedback.swift
index 7bd0b20..38a84d0 100644
--- a/MTMR/HapticFeedback.swift
+++ b/MTMR/HapticFeedback.swift
@@ -9,7 +9,7 @@
import IOKit
class HapticFeedback {
- static let shared = HapticFeedback()
+ static var shared: HapticFeedback?
// Here we have list of possible IDs for Haptic Generator Device. They are not constant
// To find deviceID, you will need IORegistryExplorer app from Additional Tools for Xcode dmg
diff --git a/MTMR/Info.plist b/MTMR/Info.plist
index 6a68148..2fef6e1 100644
--- a/MTMR/Info.plist
+++ b/MTMR/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
0.23.1
CFBundleVersion
- 278
+ 294
LSApplicationCategoryType
public.app-category.utilities
LSMinimumSystemVersion
diff --git a/MTMR/ItemsParsing.swift b/MTMR/ItemsParsing.swift
index 8ed9452..ac888da 100644
--- a/MTMR/ItemsParsing.swift
+++ b/MTMR/ItemsParsing.swift
@@ -3,7 +3,7 @@ import Foundation
extension Data {
func barItemDefinitions() -> [BarItemDefinition]? {
- return try? JSONDecoder().decode([BarItemDefinition].self, from: utf8string!.stripComments().data(using: .utf8)!)
+ return try? JSONDecoder().decode([BarItemDefinition].self, from: utf8string!.stripComments().data(using: .utf8)!)
}
}
diff --git a/MTMR/TouchBarController.swift b/MTMR/TouchBarController.swift
index b0c5578..7e38e39 100644
--- a/MTMR/TouchBarController.swift
+++ b/MTMR/TouchBarController.swift
@@ -89,6 +89,15 @@ class TouchBarController: NSObject, NSTouchBarDelegate {
UserDefaults.standard.set(newValue, forKey: "com.toxblh.mtmr.settings.showControlStrip")
}
}
+
+ var hapticFeedbackState: Bool {
+ get {
+ return UserDefaults.standard.bool(forKey: "com.toxblh.mtmr.settings.hapticFeedback")
+ }
+ set {
+ UserDefaults.standard.set(newValue, forKey: "com.toxblh.mtmr.settings.hapticFeedback")
+ }
+ }
var blacklistAppIdentifiers: [String] = []
var frontmostApplicationIdentifier: String? {
diff --git a/MTMR/Widgets/AppScrubberTouchBarItem.swift b/MTMR/Widgets/AppScrubberTouchBarItem.swift
index 5ddfb50..51043da 100644
--- a/MTMR/Widgets/AppScrubberTouchBarItem.swift
+++ b/MTMR/Widgets/AppScrubberTouchBarItem.swift
@@ -146,12 +146,12 @@ class AppScrubberTouchBarItem: NSCustomTouchBarItem, NSScrubberDelegate, NSScrub
ticks += 1
if ticks == minTicks {
- HapticFeedback.shared.tap(strong: 2)
+ HapticFeedback.shared?.tap(strong: 2)
}
if ticks > maxTicks {
stopTimer()
- HapticFeedback.shared.tap(strong: 6)
+ HapticFeedback.shared?.tap(strong: 6)
}
}
@@ -182,7 +182,7 @@ class AppScrubberTouchBarItem: NSCustomTouchBarItem, NSScrubberDelegate, NSScrub
NSWorkspace.shared.openFile(bundleIdentifier!.replacingOccurrences(of: "file://", with: ""))
} else {
NSWorkspace.shared.launchApplication(withBundleIdentifier: bundleIdentifier!, options: [.default], additionalEventParamDescriptor: nil, launchIdentifier: nil)
- HapticFeedback.shared.tap(strong: 6)
+ HapticFeedback.shared?.tap(strong: 6)
}
updateRunningApplication()
@@ -201,7 +201,7 @@ class AppScrubberTouchBarItem: NSCustomTouchBarItem, NSScrubberDelegate, NSScrub
}
}
} else {
- HapticFeedback.shared.tap(strong: 6)
+ HapticFeedback.shared?.tap(strong: 6)
if let index = self.persistentAppIdentifiers.index(of: bundleIdentifier!) {
persistentAppIdentifiers.remove(at: index)
} else {