From fbd0ab8680830efde3ba24bb0839747331c3d40e Mon Sep 17 00:00:00 2001 From: Qiu Yuzhou Date: Sat, 31 Oct 2026 17:30:53 +0800 Subject: [PATCH] feat: add status bar runtime dots toggle --- .../App/Resources/Localizable.xcstrings | 17 +++++++++++++++++ .../App/UI/Settings/SettingsView.swift | 4 ++++ .../App/UI/Workspace/StatusCardView.swift | 9 ++++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ShadowsocksX-NG2/App/Resources/Localizable.xcstrings b/ShadowsocksX-NG2/App/Resources/Localizable.xcstrings index d32145ea..97efad8b 100644 --- a/ShadowsocksX-NG2/App/Resources/Localizable.xcstrings +++ b/ShadowsocksX-NG2/App/Resources/Localizable.xcstrings @@ -1,6 +1,23 @@ { "sourceLanguage": "zh-Hans", "strings": { + "显示状态栏运行状态圆点": { + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Show runtime status dots in the menu bar" + } + }, + "zh-Hans": { + "stringUnit": { + "state": "translated", + "value": "显示状态栏运行状态圆点" + } + } + } + }, "服务器库无法读取": { "extractionState": "manual", "localizations": { diff --git a/ShadowsocksX-NG2/App/UI/Settings/SettingsView.swift b/ShadowsocksX-NG2/App/UI/Settings/SettingsView.swift index 6914916d..355f6426 100644 --- a/ShadowsocksX-NG2/App/UI/Settings/SettingsView.swift +++ b/ShadowsocksX-NG2/App/UI/Settings/SettingsView.swift @@ -9,6 +9,7 @@ struct SettingsView: View { @ObservedObject var loginController: LaunchAtLoginController @ObservedObject var silentLaunch: SilentLaunchController @State private var presentedEditor: SettingsEditorSheet? + @AppStorage("showStatusBarRuntimeDots") private var showStatusBarRuntimeDots = true var body: some View { Form { @@ -69,6 +70,9 @@ struct SettingsView: View { .toggleStyle(.switch) } .padding(.vertical, 4) + Toggle("显示状态栏运行状态圆点", isOn: $showStatusBarRuntimeDots) + .toggleStyle(.switch) + .padding(.vertical, 4) LanguageSettingsRow() } header: { sectionHeader(String(localized: "常规")) diff --git a/ShadowsocksX-NG2/App/UI/Workspace/StatusCardView.swift b/ShadowsocksX-NG2/App/UI/Workspace/StatusCardView.swift index 421d8d16..5ea1ba0c 100644 --- a/ShadowsocksX-NG2/App/UI/Workspace/StatusCardView.swift +++ b/ShadowsocksX-NG2/App/UI/Workspace/StatusCardView.swift @@ -67,6 +67,7 @@ struct StatusMenuLabel: View { let statusDisplay: StatusDisplayModel @Environment(\.colorScheme) private var colorScheme @Environment(\.displayScale) private var displayScale + @AppStorage("showStatusBarRuntimeDots") private var showStatusBarRuntimeDots = true var body: some View { Image(nsImage: statusImage) @@ -85,9 +86,11 @@ struct StatusMenuLabel: View { .font(.system(size: 16)) .foregroundStyle(.primary) .frame(width: 18, height: 18) - VStack(spacing: 5) { - RuntimeStatusDot(tone: statusDisplay.agent.row.tone, diameter: 4) - RuntimeStatusDot(tone: statusDisplay.systemProxy.row.tone, diameter: 4) + if showStatusBarRuntimeDots { + VStack(spacing: 5) { + RuntimeStatusDot(tone: statusDisplay.agent.row.tone, diameter: 4) + RuntimeStatusDot(tone: statusDisplay.systemProxy.row.tone, diameter: 4) + } } } .environment(\.colorScheme, colorScheme))