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:
Davide De Rosa 2022-08-19 08:45:36 +02:00
parent d10edc69fe
commit 4d56ed6fca
3 changed files with 15 additions and 26 deletions

View File

@ -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

View File

@ -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)
} }
} }
} }

View File

@ -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
} }
} }