diff --git a/Packages/vChewing_MainAssembly/Sources/MainAssembly/PrefMgr_Core.swift b/Packages/vChewing_MainAssembly/Sources/MainAssembly/PrefMgr_Core.swift index 35377ece..65ac3295 100644 --- a/Packages/vChewing_MainAssembly/Sources/MainAssembly/PrefMgr_Core.swift +++ b/Packages/vChewing_MainAssembly/Sources/MainAssembly/PrefMgr_Core.swift @@ -35,6 +35,9 @@ import SwiftExtension @AppProperty(key: UserDef.kFailureFlagForUOMObservation.rawValue, defaultValue: false) public dynamic var failureFlagForUOMObservation: Bool + @AppProperty(key: UserDef.kSecurityHardenedCompositionBuffer.rawValue, defaultValue: false) + public dynamic var securityHardenedCompositionBuffer: Bool + @AppProperty(key: UserDef.kDeltaOfCalendarYears.rawValue, defaultValue: -2000) public dynamic var deltaOfCalendarYears: Int diff --git a/Packages/vChewing_Shared/Sources/Shared/Protocols/PrefMgrProtocol.swift b/Packages/vChewing_Shared/Sources/Shared/Protocols/PrefMgrProtocol.swift index 2f43b587..94377b39 100644 --- a/Packages/vChewing_Shared/Sources/Shared/Protocols/PrefMgrProtocol.swift +++ b/Packages/vChewing_Shared/Sources/Shared/Protocols/PrefMgrProtocol.swift @@ -11,6 +11,7 @@ import Foundation public protocol PrefMgrProtocol { var isDebugModeEnabled: Bool { get set } var failureFlagForUOMObservation: Bool { get set } + var securityHardenedCompositionBuffer: Bool { get set } var deltaOfCalendarYears: Int { get set } var mostRecentInputMode: String { get set } var useExternalFactoryDict: Bool { get set } diff --git a/Packages/vChewing_Shared/Sources/Shared/UserDef.swift b/Packages/vChewing_Shared/Sources/Shared/UserDef.swift index 4789e9b9..757d03b5 100644 --- a/Packages/vChewing_Shared/Sources/Shared/UserDef.swift +++ b/Packages/vChewing_Shared/Sources/Shared/UserDef.swift @@ -31,6 +31,7 @@ public enum UserDef: String, CaseIterable { case kIsDebugModeEnabled = "_DebugMode" case kFailureFlagForUOMObservation = "_FailureFlag_UOMObservation" + case kSecurityHardenedCompositionBuffer = "SecurityHardenedCompositionBuffer" case kDeltaOfCalendarYears = "DeltaOfCalendarYears" case kMostRecentInputMode = "MostRecentInputMode" case kCassettePath = "CassettePath" @@ -145,6 +146,7 @@ public extension UserDef { switch self { case .kIsDebugModeEnabled: return .bool case .kFailureFlagForUOMObservation: return .bool + case .kSecurityHardenedCompositionBuffer: return .bool case .kDeltaOfCalendarYears: return .integer case .kMostRecentInputMode: return .string case .kCassettePath: return .string @@ -231,6 +233,10 @@ public extension UserDef { switch self { case .kIsDebugModeEnabled: return .init(userDef: self, shortTitle: "Debug Mode") case .kFailureFlagForUOMObservation: return nil + case .kSecurityHardenedCompositionBuffer: return .init( + userDef: self, shortTitle: "Security-harden the composition buffer for all clients", + description: "This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead." + ) case .kDeltaOfCalendarYears: return nil case .kMostRecentInputMode: return nil case .kCassettePath: return .init( diff --git a/Source/Resources/Base.lproj/Localizable.strings b/Source/Resources/Base.lproj/Localizable.strings index e6c5942a..07a7c7bc 100644 --- a/Source/Resources/Base.lproj/Localizable.strings +++ b/Source/Resources/Base.lproj/Localizable.strings @@ -311,6 +311,7 @@ "Quick Setup:" = "Quick Setup:"; "Read external factory dictionary files if possible" = "Read external factory dictionary files if possible"; "Secondary Pinyin with Numeral Intonation" = "Secondary Pinyin with Numeral Intonation"; +"Security-harden the composition buffer for all clients" = "Security-harden the composition buffer for all clients"; "Seigyou" = "Seigyou (JinYei)"; "Selection Keys:" = "Selection Keys:"; "Share alphanumerical mode status across all clients" = "Share alphanumerical mode status across all clients"; @@ -337,6 +338,7 @@ "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable."; "This feature requires macOS 10.15 and above." = "This feature requires macOS 10.15 and above."; "This feature requires macOS 12 and above." = "This feature requires macOS 12 and above."; +"This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead." = "This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead."; "This only works when being toggled by Shift key and JIS Eisu key." = "This only works when being toggled by Shift key and JIS Eisu key."; "This only works with Tadokoro candidate window." = "This only works with Tadokoro candidate window."; "This will also affect the row / column capacity of the candidate window." = "This will also affect the row / column capacity of the candidate window."; diff --git a/Source/Resources/en.lproj/Localizable.strings b/Source/Resources/en.lproj/Localizable.strings index e6c5942a..07a7c7bc 100644 --- a/Source/Resources/en.lproj/Localizable.strings +++ b/Source/Resources/en.lproj/Localizable.strings @@ -311,6 +311,7 @@ "Quick Setup:" = "Quick Setup:"; "Read external factory dictionary files if possible" = "Read external factory dictionary files if possible"; "Secondary Pinyin with Numeral Intonation" = "Secondary Pinyin with Numeral Intonation"; +"Security-harden the composition buffer for all clients" = "Security-harden the composition buffer for all clients"; "Seigyou" = "Seigyou (JinYei)"; "Selection Keys:" = "Selection Keys:"; "Share alphanumerical mode status across all clients" = "Share alphanumerical mode status across all clients"; @@ -337,6 +338,7 @@ "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable."; "This feature requires macOS 10.15 and above." = "This feature requires macOS 10.15 and above."; "This feature requires macOS 12 and above." = "This feature requires macOS 12 and above."; +"This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead." = "This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead."; "This only works when being toggled by Shift key and JIS Eisu key." = "This only works when being toggled by Shift key and JIS Eisu key."; "This only works with Tadokoro candidate window." = "This only works with Tadokoro candidate window."; "This will also affect the row / column capacity of the candidate window." = "This will also affect the row / column capacity of the candidate window."; diff --git a/Source/Resources/ja.lproj/Localizable.strings b/Source/Resources/ja.lproj/Localizable.strings index 86a790c6..aee17863 100644 --- a/Source/Resources/ja.lproj/Localizable.strings +++ b/Source/Resources/ja.lproj/Localizable.strings @@ -312,6 +312,7 @@ "Quick Setup:" = "直接設定:"; "Read external factory dictionary files if possible" = "なるべく(内蔵辞書より)外部の公式辞書ファイルを利用"; "Secondary Pinyin with Numeral Intonation" = "国音二式 (ローマ字+数字音調)"; +"Security-harden the composition buffer for all clients" = "全ての客体アプリに対して、入力緩衝列にセキュリティ強化対策を起用"; "Seigyou" = "精業配列"; "Selection Keys:" = "言選り用キー:"; "Share alphanumerical mode status across all clients" = "全ての客体アプリに英数入力モードの状態を共有"; @@ -338,6 +339,7 @@ "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "この機能の利用する NSEvent は、macOS 内蔵の入力アプリ共用モジュール「InputMethodKit」から提供した NSEvent のみであり、その NSEvent 文脈関係で「Shift キーは1回押したかどうか」と判断することはできる。この事実に疑いを持つ者は、本アプリのソースコードを審査するか、あるいは本アプリを逆向工程(分解工学, いわゆる「Reverse-Engineering」)するがよい。"; "This feature requires macOS 10.15 and above." = "この機能の稼働には macOS 10.15 以降のシステムが必要である。"; "This feature requires macOS 12 and above." = "この機能の稼働には macOS 12 以降のシステムが必要である。"; +"This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead." = "これで、どの客体アプリも、入力緩衝列の送り出さなかった内容を(勝手に)読み用いることは不可能になる。すなわち「吹き出し入力緩衝列ウィンドウ」の「常に出番」である。"; "This only works when being toggled by Shift key and JIS Eisu key." = "Shift キーとJIS 英数キーだけでの英数入力モード状態切替の話。"; "This only works with Tadokoro candidate window." = "これは田所候補陳列ウィンドウだけに効ける機能である。"; "This will also affect the row / column capacity of the candidate window." = "言選り用キーの数は、候補陳列の行・列の容量制限にも影響。"; diff --git a/Source/Resources/zh-Hans.lproj/Localizable.strings b/Source/Resources/zh-Hans.lproj/Localizable.strings index 44edc148..d83f5f24 100644 --- a/Source/Resources/zh-Hans.lproj/Localizable.strings +++ b/Source/Resources/zh-Hans.lproj/Localizable.strings @@ -311,6 +311,7 @@ "Quick Setup:" = "直接设定:"; "Read external factory dictionary files if possible" = "尽量使用外置原厂辞典 plist 档案"; "Secondary Pinyin with Numeral Intonation" = "国音二式+数字标调"; +"Security-harden the composition buffer for all clients" = "针对所有客体软体启用强化型组字区安全防护"; "Seigyou" = "精业排列"; "Selection Keys:" = "选字键:"; "Share alphanumerical mode status across all clients" = "对所有客体应用共用中英文输入切换状态"; @@ -337,6 +338,7 @@ "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "该功能只需要对借由 macOS 内建的输入法框架传来的 NSEvent 做上下文分析,自然没有「向使用者寻求系统全局键盘事件监听权限」之必要。您可自行审视敝输入法的原始程式码仓库、或对敝输入法逆向工程,以自行证实此处所言之真假。"; "This feature requires macOS 10.15 and above." = "该功能要求系统版本至少 macOS 10.15。"; "This feature requires macOS 12 and above." = "该功能要求系统版本至少 macOS 12。"; +"This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead." = "这会阻止任何客体擅自存取尚未递交的组字区内容。此举也会全局启用浮动组字窗。"; "This only works when being toggled by Shift key and JIS Eisu key." = "仅用于以 Shift 键或 JIS 英数键切换中英文输入模式的场合。"; "This only works with Tadokoro candidate window." = "该选项仅对田所选字窗起作用。"; "This will also affect the row / column capacity of the candidate window." = "该选项也会影响到选字窗每行/每列最多显示的候选字数量。"; diff --git a/Source/Resources/zh-Hant.lproj/Localizable.strings b/Source/Resources/zh-Hant.lproj/Localizable.strings index b9964dfd..8c0551d6 100644 --- a/Source/Resources/zh-Hant.lproj/Localizable.strings +++ b/Source/Resources/zh-Hant.lproj/Localizable.strings @@ -311,6 +311,7 @@ "Quick Setup:" = "直接設定:"; "Read external factory dictionary files if possible" = "盡量使用外置原廠辭典 plist 檔案"; "Secondary Pinyin with Numeral Intonation" = "國音二式+數字標調"; +"Security-harden the composition buffer for all clients" = "針對所有客體軟體啟用強化型組字區安全防護"; "Seigyou" = "精業排列"; "Selection Keys:" = "選字鍵:"; "Share alphanumerical mode status across all clients" = "對所有客體應用共用中英文輸入切換狀態"; @@ -337,6 +338,7 @@ "This feature only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "該功能只需要對藉由 macOS 內建的輸入法框架傳來的 NSEvent 做上下文分析,自然沒有「向使用者尋求系統全局鍵盤事件監聽權限」之必要。您可自行審視敝輸入法的原始程式碼倉庫、或對敝輸入法逆向工程,以自行證實此處所言之真假。"; "This feature requires macOS 10.15 and above." = "該功能要求系統版本至少 macOS 10.15。"; "This feature requires macOS 12 and above." = "該功能要求系統版本至少 macOS 12。"; +"This hinders all client apps from unwelcomely accessing your uncommitted contents in the composition buffer. A popup composition buffer will be shown instead." = "這會阻止任何客體擅自存取尚未遞交的組字區內容。此舉也會全局啟用浮動組字窗。"; "This only works when being toggled by Shift key and JIS Eisu key." = "僅用於以 Shift 鍵或 JIS 英數鍵切換中英文輸入模式的場合。"; "This only works with Tadokoro candidate window." = "該選項僅對田所選字窗起作用。"; "This will also affect the row / column capacity of the candidate window." = "該選項也會影響到選字窗每行/每列最多顯示的候選字數量。";