Private
Public Access
1
0

osx: wiring for opening a new window, but not connected to gesture yet

when I add `.tapGesture(count: 2)` to list items, this seems to block
single clicks because SwiftUI sucks. Need to find a better way to invoke
this.
This commit is contained in:
2025-09-11 15:33:56 -07:00
parent 955ff95520
commit 6261351598
3 changed files with 46 additions and 2 deletions

View File

@@ -18,6 +18,10 @@ struct KordophoneApp: App
TextEditingCommands() TextEditingCommands()
} }
WindowGroup(id: .transcriptWindow, for: Display.Conversation.self) { selectedConversation in
TranscriptWindowView(conversation: selectedConversation)
}
Settings { Settings {
PreferencesView() PreferencesView()
} }
@@ -28,3 +32,42 @@ struct KordophoneApp: App
print("Error: \(e.localizedDescription)") print("Error: \(e.localizedDescription)")
} }
} }
struct TranscriptWindowView: View
{
@State private var transcriptViewModel = TranscriptView.ViewModel()
@State private var entryViewModel = MessageEntryView.ViewModel()
private let displayedConversation: Binding<Display.Conversation?>
public init(conversation: Binding<Display.Conversation?>) {
self.displayedConversation = conversation
transcriptViewModel.displayedConversation = conversation.wrappedValue
observeDisplayedConversationChanges()
}
private func observeDisplayedConversationChanges() {
withObservationTracking {
_ = displayedConversation.wrappedValue
} onChange: {
Task { @MainActor in
guard let displayedConversation = self.displayedConversation.wrappedValue else { return }
transcriptViewModel.displayedConversation = displayedConversation
observeDisplayedConversationChanges()
}
}
}
var body: some View {
VStack {
ConversationView(transcriptModel: $transcriptViewModel, entryModel: $entryViewModel)
.navigationTitle(displayedConversation.wrappedValue?.displayName ?? "Kordophone")
.selectedConversation(displayedConversation.wrappedValue)
}
}
}
extension String
{
static let transcriptWindow = "TranscriptWindow"
}

View File

@@ -11,6 +11,7 @@ struct ConversationListView: View
{ {
@Binding var model: ViewModel @Binding var model: ViewModel
@Environment(\.xpcClient) private var xpcClient @Environment(\.xpcClient) private var xpcClient
@Environment(\.openWindow) private var openWindow
var body: some View { var body: some View {
List($model.conversations, selection: $model.selectedConversation) { conv in List($model.conversations, selection: $model.selectedConversation) { conv in

View File

@@ -10,7 +10,7 @@ import XPC
enum Display enum Display
{ {
struct Conversation: Identifiable, Hashable struct Conversation: Identifiable, Hashable, Codable
{ {
let id: String let id: String
let name: String? let name: String?