Only hide app by closing it
Keep constant "Show" action in menu: - Bring app to foreground if in background - Activate app if already in foreground
This commit is contained in:
parent
d10edc69fe
commit
4d56ed6fca
|
@ -57,9 +57,10 @@ class PassepartoutMenu {
|
||||||
var children: [ItemGroup] = []
|
var children: [ItemGroup] = []
|
||||||
|
|
||||||
children.append(contentsOf: [
|
children.append(contentsOf: [
|
||||||
VisibilityItem(utils: macMenuDelegate.utils) {
|
VisibilityItem(
|
||||||
$0 ? L10n.Global.Strings.hide : L10n.Global.Strings.show
|
L10n.Global.Strings.show,
|
||||||
},
|
utils: macMenuDelegate.utils
|
||||||
|
),
|
||||||
LaunchOnLoginItem(
|
LaunchOnLoginItem(
|
||||||
L10n.Preferences.Items.LaunchesOnLogin.caption,
|
L10n.Preferences.Items.LaunchesOnLogin.caption,
|
||||||
utils: macMenuDelegate.utils
|
utils: macMenuDelegate.utils
|
||||||
|
|
|
@ -32,28 +32,17 @@ extension VisibilityItem {
|
||||||
|
|
||||||
private let utils: LightUtils
|
private let utils: LightUtils
|
||||||
|
|
||||||
private let titleBlock: (Bool) -> String
|
init(utils: LightUtils) {
|
||||||
|
|
||||||
init(utils: LightUtils, titleBlock: @escaping (Bool) -> String) {
|
|
||||||
self.titleBlock = titleBlock
|
|
||||||
|
|
||||||
transformer = .shared
|
transformer = .shared
|
||||||
self.utils = utils
|
self.utils = utils
|
||||||
}
|
}
|
||||||
|
|
||||||
var title: String {
|
@objc func bringToForeground() {
|
||||||
titleBlock(transformer.isForeground)
|
transformer.bringToForeground()
|
||||||
}
|
|
||||||
|
|
||||||
@objc func toggleForeground() {
|
|
||||||
transformer.toggleForeground()
|
|
||||||
if transformer.isForeground {
|
if transformer.isForeground {
|
||||||
utils.requestScene()
|
utils.requestScene()
|
||||||
}
|
NSApp.activate(ignoringOtherApps: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func subscribe(_ block: @escaping () -> Void) {
|
|
||||||
transformer.subscribe(block)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,24 +27,23 @@ import Foundation
|
||||||
import AppKit
|
import AppKit
|
||||||
|
|
||||||
struct VisibilityItem: Item {
|
struct VisibilityItem: Item {
|
||||||
|
private let title: String
|
||||||
|
|
||||||
private let viewModel: ViewModel
|
private let viewModel: ViewModel
|
||||||
|
|
||||||
init(utils: LightUtils, titleBlock: @escaping (Bool) -> String) {
|
init(_ title: String, utils: LightUtils) {
|
||||||
viewModel = ViewModel(utils: utils, titleBlock: titleBlock)
|
self.title = title
|
||||||
|
viewModel = ViewModel(utils: utils)
|
||||||
}
|
}
|
||||||
|
|
||||||
func asMenuItem(withParent parent: NSMenu) -> NSMenuItem {
|
func asMenuItem(withParent parent: NSMenu) -> NSMenuItem {
|
||||||
let item = NSMenuItem(
|
let item = NSMenuItem(
|
||||||
title: viewModel.title,
|
title: title,
|
||||||
action: #selector(viewModel.toggleForeground),
|
action: #selector(viewModel.bringToForeground),
|
||||||
keyEquivalent: ""
|
keyEquivalent: ""
|
||||||
)
|
)
|
||||||
item.target = viewModel
|
item.target = viewModel
|
||||||
item.representedObject = viewModel
|
item.representedObject = viewModel
|
||||||
|
|
||||||
viewModel.subscribe {
|
|
||||||
item.title = viewModel.title
|
|
||||||
}
|
|
||||||
return item
|
return item
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue