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()
}
WindowGroup(id: .transcriptWindow, for: Display.Conversation.self) { selectedConversation in
TranscriptWindowView(conversation: selectedConversation)
}
Settings {
PreferencesView()
}
@@ -28,3 +32,42 @@ struct KordophoneApp: App
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,7 +11,8 @@ struct ConversationListView: View
{
@Binding var model: ViewModel
@Environment(\.xpcClient) private var xpcClient
@Environment(\.openWindow) private var openWindow
var body: some View {
List($model.conversations, selection: $model.selectedConversation) { conv in
let isUnread = conv.wrappedValue.unreadCount > 0

View File

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