Prechádzať zdrojové kódy

display(iOS): disable serial ports for external displays

osy 3 rokov pred
rodič
commit
19bafbec2e

+ 5 - 2
Platform/iOS/VMSessionState.swift

@@ -80,7 +80,7 @@ import SwiftUI
         if !isExternal, activeWindow == nil {
             activeWindow = window
         }
-        assignDefaultDisplay(for: window)
+        assignDefaultDisplay(for: window, isExternal: isExternal)
     }
     
     func removeWindow(_ window: UUID) {
@@ -94,7 +94,7 @@ import SwiftUI
         windowDeviceMap.removeValue(forKey: window)
     }
     
-    private func assignDefaultDisplay(for window: UUID) {
+    private func assignDefaultDisplay(for window: UUID, isExternal: Bool) {
         // default first to next GUI, then to next serial
         let filtered = devices.filter {
             if case .display(_, _) = $0 {
@@ -109,6 +109,9 @@ import SwiftUI
                 return
             }
         }
+        if isExternal {
+            return // no serial device for external display
+        }
         for device in devices {
             if !windowDeviceMap.values.contains(device) {
                 windowDeviceMap[window] = device

+ 3 - 4
Platform/iOS/VMToolbarDisplayMenuView.swift

@@ -24,6 +24,7 @@ struct VMToolbarDisplayMenuView: View {
         Menu {
             Menu {
                 Picker("", selection: $state.device) {
+                    Label("None", systemImage: "rectangle.dashed").tag(nil as VMWindowState.Device?)
                     ForEach(session.devices) { device in
                         switch device {
                         case .serial(_, let index):
@@ -44,11 +45,9 @@ struct VMToolbarDisplayMenuView: View {
                         Label("Zoom/Reset", systemImage: externalWindowBinding.isViewportChanged.wrappedValue ? "arrow.down.right.and.arrow.up.left" : "arrow.up.left.and.arrow.down.right")
                     }
                     Picker("", selection: externalWindowBinding.device) {
+                        Label("None", systemImage: "rectangle.dashed").tag(nil as VMWindowState.Device?)
                         ForEach(session.devices) { device in
-                            switch device {
-                            case .serial(_, let index):
-                                Label("Serial \(index): \(session.qemuConfig.serials[index].target.prettyValue)", systemImage: "cable.connector").tag(device as VMWindowState.Device?)
-                            case .display(_, let index):
+                            if case .display(_, let index) = device {
                                 Label("Display \(index): \(session.qemuConfig.displays[index].hardware.prettyValue)", systemImage: "display").tag(device as VMWindowState.Device?)
                             }
                         }

+ 5 - 0
Platform/iOS/VMWindowView.swift

@@ -122,6 +122,11 @@ struct VMWindowView: View {
                 state.device = nil
             }
         }
+        .onChange(of: state.device) { newDevice in
+            if session.windowDeviceMap[state.id] != newDevice {
+                session.windowDeviceMap[state.id] = newDevice
+            }
+        }
         .onChange(of: session.mostRecentConnectedDevice) { newValue in
             if session.activeWindow == state.id, let device = newValue {
                 state.alert = .deviceConnected(device)