menu: gate Install action on connection state (#174)

This commit is contained in:
TastyHeadphones
2026-03-10 12:32:27 +09:00
committed by GitHub
parent cd389412ec
commit 490e024f9d
3 changed files with 13 additions and 1 deletions

View File

@@ -150,6 +150,7 @@ class VPhoneAppDelegate: NSObject, NSApplicationDelegate {
// Wire location toggle through onConnect/onDisconnect
control.onConnect = { [weak mc, weak provider = locationProvider] caps in
mc?.updateConnectAvailability(available: true)
mc?.updateInstallAvailability(available: true)
if caps.contains("location") {
mc?.updateLocationCapability(available: true)
// Auto-resume if user had toggle on
@@ -162,6 +163,7 @@ class VPhoneAppDelegate: NSObject, NSApplicationDelegate {
}
control.onDisconnect = { [weak mc, weak provider = locationProvider] in
mc?.updateConnectAvailability(available: false)
mc?.updateInstallAvailability(available: false)
provider?.stopReplay()
provider?.stopForwarding()
mc?.updateLocationCapability(available: false)

View File

@@ -16,6 +16,7 @@ class VPhoneMenuController {
var connectDevModeStatusItem: NSMenuItem?
var connectPingItem: NSMenuItem?
var connectGuestVersionItem: NSMenuItem?
var installPackageItem: NSMenuItem?
var locationProvider: VPhoneLocationProvider?
var locationMenuItem: NSMenuItem?
var locationPresetMenuItem: NSMenuItem?

View File

@@ -7,11 +7,20 @@ extension VPhoneMenuController {
func buildInstallMenu() -> NSMenuItem {
let item = NSMenuItem()
let menu = NSMenu(title: "Install")
menu.addItem(makeItem("Install IPA/TIPA...", action: #selector(installIPAFromDisk)))
menu.autoenablesItems = false
let install = makeItem("Install IPA/TIPA...", action: #selector(installIPAFromDisk))
install.isEnabled = false
installPackageItem = install
menu.addItem(install)
item.submenu = menu
return item
}
func updateInstallAvailability(available: Bool) {
installPackageItem?.isEnabled = available
}
@objc func installIPAFromDisk() {
guard control.isConnected else {
showAlert(title: "Install App Package", message: "Guest is not connected.", style: .warning)