mirror of
https://github.com/MonitorControl/MonitorControl.git
synced 2026-06-02 06:02:20 -06:00
Various bug fixes
- Fix hide menu icon after logoff/login. - Handle sleep better - fix when user sleeps, wakes, resleeps etc during the sobering period. - Fix menu icon and lowerContrastAfterBrightness when Reset Preferences.
This commit is contained in:
parent
53d100cfcc
commit
512b5b3ef5
16 changed files with 52 additions and 55 deletions
|
|
@ -18,7 +18,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
let coreAudio = SimplyCoreAudio()
|
||||
var accessibilityObserver: NSObjectProtocol!
|
||||
var willReconfigureDisplay: Bool = false // A reconfigure display command is already dispatched
|
||||
var displaySleep: Bool = false // Don't reconfigure display as the system or display is sleeping or wake just recently.
|
||||
var displaySleep: Int = 0 // Don't reconfigure display as the system or display is sleeping or wake just recently.
|
||||
lazy var preferencesWindowController: PreferencesWindowController = {
|
||||
let storyboard = NSStoryboard(name: "Main", bundle: Bundle.main)
|
||||
let mainPrefsVc = storyboard.instantiateController(withIdentifier: "MainPrefsVC") as? MainPrefsViewController
|
||||
|
|
@ -39,20 +39,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
self.subscribeEventListeners()
|
||||
self.setDefaultPrefs()
|
||||
self.updateMediaKeyTap()
|
||||
if prefs.bool(forKey: Utils.PrefKeys.hideMenuIcon.rawValue) {
|
||||
self.statusItem.isVisible = false
|
||||
} else {
|
||||
self.statusItem.isVisible = true
|
||||
}
|
||||
defer {
|
||||
self.statusItem.isVisible = true
|
||||
}
|
||||
if #available(macOS 11.0, *) {
|
||||
self.statusItem.button?.image = NSImage(systemSymbolName: "sun.max", accessibilityDescription: "MonitorControl")
|
||||
} else {
|
||||
self.statusItem.button?.image = NSImage(named: "status")
|
||||
self.statusItem.isVisible = false
|
||||
}
|
||||
self.statusItem.isVisible = prefs.bool(forKey: Utils.PrefKeys.hideMenuIcon.rawValue) ? false : true
|
||||
self.statusItem.menu = self.statusMenu
|
||||
self.checkPermissions()
|
||||
CGDisplayRegisterReconfigurationCallback({ _, _, _ in app.displayReconfigured() }, nil)
|
||||
|
|
@ -64,8 +56,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
return true
|
||||
}
|
||||
|
||||
func applicationWillTerminate(_: Notification) {
|
||||
os_log("Goodbye!", type: .info)
|
||||
func resetContrastAfterBrightness() {
|
||||
for externalDisplay in DisplayManager.shared.getExternalDisplays() where externalDisplay.isContrastAfterBrightnessMode {
|
||||
let contrastRestoreValue = externalDisplay.getRestoreValue(for: .contrast)
|
||||
guard externalDisplay.writeDDCValues(command: .contrast, value: UInt16(contrastRestoreValue)) == true else {
|
||||
|
|
@ -73,6 +64,11 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
}
|
||||
externalDisplay.saveValue(contrastRestoreValue, for: .contrast)
|
||||
}
|
||||
}
|
||||
|
||||
func applicationWillTerminate(_: Notification) {
|
||||
os_log("Goodbye!", type: .info)
|
||||
self.resetContrastAfterBrightness()
|
||||
self.statusItem.isVisible = true
|
||||
}
|
||||
|
||||
|
|
@ -159,7 +155,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
}
|
||||
|
||||
func displayReconfigured() {
|
||||
if !self.willReconfigureDisplay, !self.displaySleep {
|
||||
if !self.willReconfigureDisplay, self.displaySleep == 0 {
|
||||
self.willReconfigureDisplay = true
|
||||
os_log("Display to be reconfigured via updateDisplay in 2 seconds", type: .info)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
|
||||
|
|
@ -169,7 +165,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
}
|
||||
|
||||
func updateDisplays() {
|
||||
guard !self.displaySleep else {
|
||||
guard self.displaySleep == 0 else {
|
||||
return
|
||||
}
|
||||
os_log("Request for updateDisplay", type: .info)
|
||||
|
|
@ -290,24 +286,25 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
}
|
||||
|
||||
@objc private func sleepNotification() {
|
||||
if !self.displaySleep {
|
||||
os_log("Sleeping...zZz.", type: .info)
|
||||
self.displaySleep = true
|
||||
}
|
||||
self.displaySleep += 1
|
||||
os_log("Sleeping with sleep %{public}@", type: .info, String(self.displaySleep))
|
||||
}
|
||||
|
||||
@objc private func wakeNotofication() {
|
||||
os_log("Wake up!", type: .info)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) { // Some displays take time to recover...
|
||||
self.soberNow()
|
||||
if self.displaySleep != 0 {
|
||||
os_log("Waking up from sleep %{public}@", type: .info, String(self.displaySleep))
|
||||
let sleepID = self.displaySleep
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 6.0) { // Some displays take time to recover...
|
||||
self.soberNow(sleepID: sleepID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func soberNow() {
|
||||
if self.displaySleep {
|
||||
os_log("Sober now!", type: .info)
|
||||
self.displaySleep = false
|
||||
self.displayReconfigured()
|
||||
private func soberNow(sleepID: Int) {
|
||||
if self.displaySleep == sleepID {
|
||||
os_log("Sober from sleep %{public}@", type: .info, String(self.displaySleep))
|
||||
self.displaySleep = 0
|
||||
self.updateDisplays()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -348,7 +345,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||
|
||||
extension AppDelegate: MediaKeyTapDelegate {
|
||||
func handle(mediaKey: MediaKey, event: KeyEvent?, modifiers: NSEvent.ModifierFlags?) {
|
||||
guard !self.displaySleep && !self.willReconfigureDisplay else {
|
||||
guard self.displaySleep == 0 && !self.willReconfigureDisplay else {
|
||||
return
|
||||
}
|
||||
if self.handleOpenPrefPane(mediaKey: mediaKey, event: event, modifiers: modifiers) {
|
||||
|
|
@ -379,7 +376,7 @@ extension AppDelegate: MediaKeyTapDelegate {
|
|||
}
|
||||
|
||||
private func sendDisplayCommand(mediaKey: MediaKey, isRepeat: Bool, isSmallIncrement: Bool) {
|
||||
guard !self.displaySleep, !self.willReconfigureDisplay else {
|
||||
guard self.displaySleep == 0, !self.willReconfigureDisplay else {
|
||||
return
|
||||
}
|
||||
let displays = DisplayManager.shared.getAllDisplays()
|
||||
|
|
@ -443,6 +440,7 @@ extension AppDelegate: MediaKeyTapDelegate {
|
|||
self.updateDisplays()
|
||||
self.checkPermissions()
|
||||
self.updateMediaKeyTap()
|
||||
self.resetContrastAfterBrightness()
|
||||
}
|
||||
|
||||
private func updateMediaKeyTap() {
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import Preferences
|
|||
|
||||
extension Preferences.PaneIdentifier {
|
||||
static let main = Self("Main")
|
||||
static let keys = Self("Keys")
|
||||
static let advanced = Self("Advanced")
|
||||
static let display = Self("Display")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1629</string>
|
||||
<string>1657</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class SliderHandler {
|
|||
}
|
||||
}
|
||||
|
||||
guard !app.displaySleep, !app.willReconfigureDisplay else {
|
||||
guard app.displaySleep == 0, !app.willReconfigureDisplay else {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "Aus";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Warnung ⚠️\nDas Ändern dieser Einstellungen kann zum Einfrieren des Systems oder unerwartetem Verhalten führen.";
|
||||
"frw-j2-tE1.title" = "⚠️ Warnung! Das Ändern dieser Einstellungen kann zum Einfrieren des Systems oder unerwartetem Verhalten führen.";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Verzögerung";
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "None";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Warning ⚠️\nChanging some of these setting may cause system freezes or unexpected behaviour. ";
|
||||
"frw-j2-tE1.title" = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. ";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Longer Delay";
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "Nincs";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Figyelem ⚠️\nAz alábbi beállítások megváltoztatása lefagyást vagy váratlan működést eredményezhet!";
|
||||
"frw-j2-tE1.title" = "⚠️ Figyelem! Az alábbi beállítások megváltoztatása lefagyást vagy váratlan működést eredményezhet!";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Hosszabb várakozás";
|
||||
|
|
@ -47,7 +47,7 @@
|
|||
"gxn-NH-Qhb.headerCell.title" = "Mintavételezési mód";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Brightness keys:"; ObjectID = "hdd-Zz-buN"; */
|
||||
"hdd-Zz-buN.title" = "Brightness keys:";
|
||||
"hdd-Zz-buN.title" = "Fényerő billentyűk:";
|
||||
|
||||
/* Class = "NSMenuItem"; title = "Brightness only"; ObjectID = "hjz-0c-rvK"; */
|
||||
"hjz-0c-rvK.title" = "Csak a fényerő billentyűk";
|
||||
|
|
@ -59,7 +59,7 @@
|
|||
"JKW-oY-bSb.headerCell.title" = "Azonosító";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "You can control the Brighness and Volume of your display using the Brightness and Volume keys off Apple Keyboards."; ObjectID = "K2r-aD-eec"; */
|
||||
"K2r-aD-eec.title" = "You can control the Brighness and Volume of your display using the Brightness and Volume keys off Apple Keyboards.";
|
||||
"K2r-aD-eec.title" = "A képernyő fényerejét és hangerejét az Apple Billentyűzet fényerő és hangerő gombjaival lehet szabályozni.";
|
||||
|
||||
/* Class = "NSButton"; ibShadowedToolTip = "More Info"; ObjectID = "kqn-gU-mZX"; */
|
||||
"kqn-gU-mZX.ibShadowedToolTip" = "További információ";
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
"Nvp-hI-w4x.headerCell.title" = "Modell";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "Application:"; ObjectID = "okD-DG-pYa"; */
|
||||
"okD-DG-pYa.title" = "Application:";
|
||||
"okD-DG-pYa.title" = "Alkalmazás:";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "If Menu is hidden, just relaunch the app to reveal Preferences!"; ObjectID = "PVE-y7-zIk"; */
|
||||
"PVE-y7-zIk.title" = "Ha rejtett, indítsa el újra az alkalmazást a beállítások megnyitásához!";
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "None";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Warning ⚠️\nChanging some of these setting may cause system freezes or unexpected behaviour. ";
|
||||
"frw-j2-tE1.title" = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. ";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Longer Delay";
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@
|
|||
"FoA-yh-Yx3.title" = "設定しない";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "⚠️ 注意 ⚠️\n下の設定を変更するとMacがフリーズしたり予期せぬ挙動になる場合があります。";
|
||||
"frw-j2-tE1.title" = "⚠️ 注意 下の設定を変更するとMacがフリーズしたり予期せぬ挙動になる場合があります。";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "遅延を長くする";
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
"FoA-yh-Yx3.title" = "Nikt";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Uwaga ⚠️\nZmiana niektórych z tych ustawień może spowodować zawieszenia systemu lub nieoczekiwane zachowanie.";
|
||||
"frw-j2-tE1.title" = "⚠️ Uwaga! Zmiana niektórych z tych ustawień może spowodować zawieszenia systemu lub nieoczekiwane zachowanie.";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Dłuższe opóźnienie";
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "Нет";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Внимание ⚠️\nИзменение некоторых из этих настроек может привести к зависанию системы или неожиданному поведению.";
|
||||
"frw-j2-tE1.title" = "⚠️ Внимание! Изменение некоторых из этих настроек может привести к зависанию системы или неожиданному поведению.";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Длительный опрос";
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "Немає";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "Увага! ⚠️\nЗміна деяких із цих налаштувань може привести до зависання системи або неочікуванних наслідків.";
|
||||
"frw-j2-tE1.title" = "⚠️ Увага! Зміна деяких із цих налаштувань може привести до зависання системи або неочікуванних наслідків.";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "Затримка";
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
"FoA-yh-Yx3.title" = "不请求";
|
||||
|
||||
/* Class = "NSTextFieldCell"; title = "⚠️ Warning! Changing some of these setting may cause system freezes or unexpected behaviour. "; ObjectID = "frw-j2-tE1"; */
|
||||
"frw-j2-tE1.title" = "警告 ⚠️\n更改这些设置可能会导致系统冻结或者其它的意外情况。";
|
||||
"frw-j2-tE1.title" = "⚠️ 警告 更改这些设置可能会导致系统冻结或者其它的意外情况。";
|
||||
|
||||
/* Class = "NSTableColumn"; headerCell.title = "Longer Delay"; ObjectID = "grO-Kr-l4d"; */
|
||||
"grO-Kr-l4d.headerCell.title" = "增加延时";
|
||||
|
|
|
|||
|
|
@ -48,10 +48,11 @@ class AdvancedPrefsViewController: NSViewController, PreferencePane, NSTableView
|
|||
alert.addButton(withTitle: NSLocalizedString("Yes", comment: "Shown in the alert dialog"))
|
||||
alert.addButton(withTitle: NSLocalizedString("No", comment: "Shown in the alert dialog"))
|
||||
alert.alertStyle = NSAlert.Style.warning
|
||||
|
||||
if let window = self.view.window {
|
||||
alert.beginSheetModal(for: window, completionHandler: { modalResponse in
|
||||
if modalResponse == NSApplication.ModalResponse.alertFirstButtonReturn {
|
||||
app.resetContrastAfterBrightness()
|
||||
app.statusItem.isVisible = true
|
||||
if let bundleID = Bundle.main.bundleIdentifier {
|
||||
UserDefaults.standard.removePersistentDomain(forName: bundleID)
|
||||
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.preferenceReset.rawValue), object: nil)
|
||||
|
|
|
|||
|
|
@ -54,16 +54,14 @@ class MainPrefsViewController: NSViewController, PreferencePane {
|
|||
}
|
||||
|
||||
@IBAction func hideMenuIconClicked(_ sender: NSButton) {
|
||||
if let delegate = (NSApplication.shared.delegate) as? AppDelegate {
|
||||
switch sender.state {
|
||||
case .on:
|
||||
self.prefs.set(true, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
|
||||
delegate.statusItem.isVisible = false
|
||||
case .off:
|
||||
self.prefs.set(false, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
|
||||
delegate.statusItem.isVisible = true
|
||||
default: break
|
||||
}
|
||||
switch sender.state {
|
||||
case .on:
|
||||
self.prefs.set(true, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
|
||||
app.statusItem.isVisible = false
|
||||
case .off:
|
||||
self.prefs.set(false, forKey: Utils.PrefKeys.hideMenuIcon.rawValue)
|
||||
app.statusItem.isVisible = true
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -115,6 +113,7 @@ class MainPrefsViewController: NSViewController, PreferencePane {
|
|||
NotificationCenter.default.post(name: Notification.Name(Utils.PrefKeys.showContrast.rawValue), object: nil)
|
||||
case .off:
|
||||
self.prefs.set(false, forKey: Utils.PrefKeys.lowerContrast.rawValue)
|
||||
app.resetContrastAfterBrightness()
|
||||
default: break
|
||||
}
|
||||
#if DEBUG
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>$(MARKETING_VERSION)</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1629</string>
|
||||
<string>1657</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSBackgroundOnly</key>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue