From fe78a5c29224e391b3a39c8aaf1caf198c57d780 Mon Sep 17 00:00:00 2001 From: ShikiSuen Date: Mon, 5 Jun 2023 00:07:17 +0800 Subject: [PATCH] TDKCandidates // Make CandidatePool into an ObservableObject. --- .../Sources/CandidateWindow/CandidatePool.swift | 13 +++++++++++++ .../TDKCandidates/CtlCandidateTDK.swift | 1 + .../TDKCandidates/VwrCandidateTDK_SwiftUI.swift | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift index 0c37d779..f0335083 100644 --- a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift +++ b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/CandidatePool.swift @@ -142,6 +142,14 @@ public extension CandidatePool { case vertical } + func update() { + if #available(macOS 10.15, *) { + DispatchQueue.main.async { + self.objectWillChange.send() + } + } + } + /// 往指定的方向翻頁。 /// - Parameter isBackward: 是否逆向翻頁。 /// - Returns: 操作是否順利。 @@ -418,3 +426,8 @@ private extension CandidatePool { } } } + +// MARK: - Turn CandidatePool into an ObservableObject. + +@available(macOS 10.15, *) +extension CandidatePool: ObservableObject {} diff --git a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/CtlCandidateTDK.swift b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/CtlCandidateTDK.swift index 68ba90ca..76dd9283 100644 --- a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/CtlCandidateTDK.swift +++ b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/CtlCandidateTDK.swift @@ -117,6 +117,7 @@ public class CtlCandidateTDK: CtlCandidate, NSWindowDelegate { Self.currentView = theViewCocoa break viewCheck } + Self.thePool.update() Self.currentView = NSHostingView(rootView: theView) } else { Self.currentView = theViewCocoa diff --git a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift index b0f6a8a9..d5c50be0 100644 --- a/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift +++ b/Packages/vChewing_CandidateWindow/Sources/CandidateWindow/TDKCandidates/VwrCandidateTDK_SwiftUI.swift @@ -17,7 +17,7 @@ import SwiftUIBackports public struct VwrCandidateTDK: View { public weak var controller: CtlCandidateTDK? @Environment(\.colorScheme) var colorScheme - @State public var thePool: CandidatePool + @Backport.StateObject public var thePool: CandidatePool @State public var forceCatalinaCompatibility: Bool = false var tooltip: String { thePool.tooltip } var reverseLookupResult: [String] { thePool.reverseLookupResult }