diff --git a/Assets/readme/activity.svg b/Assets/readme/activity.svg index cc0d4a4..c6f5a90 100644 --- a/Assets/readme/activity.svg +++ b/Assets/readme/activity.svg @@ -1,5 +1,5 @@ -56 commits in the last 26 weeks +68 commits in the last 26 weeks Apr May @@ -189,8 +189,9 @@ 42 commits on 2026-09-13 2 commits on 2026-09-14 12 commits on 2026-09-15 +12 commits on 2026-09-16 -56 commits in the last 26 weeks · through 2026-09-15 +68 commits in the last 26 weeks · through 2026-09-16 Less diff --git a/Assets/readme/activity.zh.svg b/Assets/readme/activity.zh.svg index 35ca9c2..f20f641 100644 --- a/Assets/readme/activity.zh.svg +++ b/Assets/readme/activity.zh.svg @@ -1,5 +1,5 @@ -近 26 周共 56 次提交 +近 26 周共 68 次提交 4月 5月 @@ -189,8 +189,9 @@ 2026-09-13:42 次提交 2026-09-14:2 次提交 2026-09-15:12 次提交 +2026-09-16:12 次提交 -近 26 周共 56 次提交 · 截至 2026-09-15 +近 26 周共 68 次提交 · 截至 2026-09-16 少 diff --git a/CHANGELOG.md b/CHANGELOG.md index 17151d3..df5be25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,14 @@ 记录 OpenStats 应用的功能新增、样式调整和问题修复,按版本与日期倒序排列。 官网、构建与发布脚本等不影响应用本身的改动不在此记录。 +## 未发布 + +### 2026-09-17 + +#### 调整 + +- 程序坞默认不再显示 OpenStats 图标:以前打开主窗口(比如从风扇弹窗进入温度与风扇页)时,图标会出现在程序坞与 ⌘Tab 里,关窗后才消失。现在和其他菜单栏工具一样始终只在菜单栏运行,主窗口照常打开并置于最前。想从程序坞或 ⌘Tab 切回主窗口的,可以在「设置 · 通用」打开“在程序坞显示图标”,开关立即生效。 + ## 0.4.0 · 2026-09-16 ### 2026-09-16 diff --git a/Packages/OpenStatsKit/Sources/Localization/Translations.swift b/Packages/OpenStatsKit/Sources/Localization/Translations.swift index b651fea..b122251 100644 --- a/Packages/OpenStatsKit/Sources/Localization/Translations.swift +++ b/Packages/OpenStatsKit/Sources/Localization/Translations.swift @@ -372,6 +372,7 @@ npm 缓存 npm Cache 圆环表示当前占用比例 A ring shows current usage 在 cleanip.io 查看这个 IP 的完整报告 Open this IP's full report on cleanip.io 在主窗口打开“{}” Open “{}” in the main window +在程序坞显示图标 Show Icon in Dock 在线升级 Online Updates 在线升级:发现新版本时显示更新摘要,一键安装并自动重启 Online updates: see what's new, install in one click and relaunch automatically 在菜单栏显示 Show in Menu Bar @@ -1030,6 +1031,7 @@ npm 缓存 npm Cache 高负载 Heavy load 高负载时着色 Color High Load 高风险 High risk +默认只在菜单栏运行;打开后,主窗口开着时图标出现在程序坞与 ⌘Tab 中 OpenStats lives in the menu bar by default. Turn this on to show its icon in the Dock and ⌘Tab while the main window is open ({}) ({}) , , ,{} 项未能移动 , {} couldn't be moved diff --git a/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/AppController.swift b/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/AppController.swift index 8396f64..a3e22dd 100644 --- a/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/AppController.swift +++ b/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/AppController.swift @@ -159,10 +159,10 @@ public final class AppController: NSObject, NSApplicationDelegate { updateTimer?.tolerance = 5 * 60 } - /// 有窗口打开时显示在程序坞与 ⌘Tab 里,全部关闭后回到仅菜单栏 + /// 默认只在菜单栏运行、不占程序坞;打开了“在程序坞显示图标”时,有窗口开着才出现在程序坞与 ⌘Tab 里 private func updateActivationPolicy() { let hasWindow = mainWindow.isVisible - let policy: NSApplication.ActivationPolicy = hasWindow ? .regular : .accessory + let policy: NSApplication.ActivationPolicy = hasWindow && model.settings.showDockIcon ? .regular : .accessory guard NSApp.activationPolicy() != policy else { return } NSApp.setActivationPolicy(policy) if hasWindow { NSApp.activate() } @@ -186,6 +186,7 @@ public final class AppController: NSObject, NSApplicationDelegate { _ = model.settings.expandedPopoverSections _ = model.keepAwake.isActive _ = model.settings.appearance + _ = model.settings.showDockIcon _ = model.isNetworkDetailVisible _ = model.settings.probeEnabled _ = model.settings.probeInBackground @@ -199,6 +200,7 @@ public final class AppController: NSObject, NSApplicationDelegate { await self.model.hub.update(self.model.demand) self.model.bluetooth.setDemand(self.model.bluetoothDemand) self.applyAppearance() + self.updateActivationPolicy() self.menuBar.update() self.menuBar.refreshPopoverHeight() self.updateNetworkVisibility() diff --git a/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/MainWindowController.swift b/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/MainWindowController.swift index b408f42..ecfd8fe 100644 --- a/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/MainWindowController.swift +++ b/Packages/OpenStatsKit/Sources/OpenStatsUI/AppKit/MainWindowController.swift @@ -1,7 +1,7 @@ import AppKit import SwiftUI -/// 主窗口。打开时应用出现在程序坞与 ⌘Tab 中,关闭后回到仅菜单栏运行 +/// 主窗口。应用默认只在菜单栏运行,窗口开着也不占程序坞;设置里打开“在程序坞显示图标”后才出现在程序坞与 ⌘Tab 中 @MainActor final class MainWindowController: NSObject, NSWindowDelegate { private let model: AppModel diff --git a/Packages/OpenStatsKit/Sources/OpenStatsUI/Settings/SettingsPages.swift b/Packages/OpenStatsKit/Sources/OpenStatsUI/Settings/SettingsPages.swift index 01d381d..74202b7 100644 --- a/Packages/OpenStatsKit/Sources/OpenStatsUI/Settings/SettingsPages.swift +++ b/Packages/OpenStatsKit/Sources/OpenStatsUI/Settings/SettingsPages.swift @@ -73,6 +73,11 @@ struct GeneralSettings: View { label: tr("登录时启动")) } } + GroupRow { + SettingRow(title: tr("在程序坞显示图标"), subtitle: tr("默认只在菜单栏运行;打开后,主窗口开着时图标出现在程序坞与 ⌘Tab 中")) { + DSToggle(isOn: $settings.showDockIcon, label: tr("在程序坞显示图标")) + } + } GroupRow { SettingRow(title: tr("刷新频率"), subtitle: tr("只显示菜单栏时的采样间隔;打开弹窗或主窗口时为 1 秒(进程页 2 秒)")) { SegmentedControl(selection: $settings.refreshSeconds, diff --git a/Packages/OpenStatsKit/Sources/OpenStatsUI/State/AppSettings.swift b/Packages/OpenStatsKit/Sources/OpenStatsUI/State/AppSettings.swift index 1059ea1..53dcbde 100644 --- a/Packages/OpenStatsKit/Sources/OpenStatsUI/State/AppSettings.swift +++ b/Packages/OpenStatsKit/Sources/OpenStatsUI/State/AppSettings.swift @@ -421,6 +421,10 @@ public final class AppSettings { public var appearance: AppearanceMode { didSet { defaults.set(appearance.rawValue, forKey: Keys.appearance) } } + /// 主窗口开着时在程序坞与 ⌘Tab 中显示图标;默认关闭,和其他菜单栏工具一样只在菜单栏运行 + public var showDockIcon: Bool { + didSet { defaults.set(showDockIcon, forKey: Keys.showDockIcon) } + } public var menuBarLayout: MenuBarLayout { didSet { defaults.set(menuBarLayout.rawValue, forKey: Keys.menuBarLayout) } } @@ -520,6 +524,7 @@ public final class AppSettings { ? defaults.integer(forKey: Keys.fanSafetyTemperature) : 95 panelTab = defaults.string(forKey: Keys.panelTab).flatMap(PanelTab.init(rawValue:)) ?? .overview appearance = defaults.string(forKey: Keys.appearance).flatMap(AppearanceMode.init(rawValue:)) ?? .system + showDockIcon = defaults.bool(forKey: Keys.showDockIcon) cleanPrefersTrash = defaults.bool(forKey: Keys.cleanPrefersTrash) menuBarLayout = defaults.string(forKey: Keys.menuBarLayout).flatMap(MenuBarLayout.init(rawValue:)) ?? .separate expandedPopoverSections = Set((defaults.stringArray(forKey: Keys.expandedPopoverSections) ?? []).compactMap(PopoverSection.init(rawValue:))) @@ -590,6 +595,7 @@ public final class AppSettings { static let fanSafetyTemperature = "fanSafetyTemperature" static let panelTab = "panelTab" static let appearance = "appearance" + static let showDockIcon = "showDockIcon" static let cleanPrefersTrash = "cleanPrefersTrash" static let menuBarLayout = "menuBarLayout" static let hiddenPopoverSections = "hiddenPopoverSections" diff --git a/Packages/OpenStatsKit/Sources/OpenStatsUI/State/SettingsDocument.swift b/Packages/OpenStatsKit/Sources/OpenStatsUI/State/SettingsDocument.swift index 2439b93..b5e357b 100644 --- a/Packages/OpenStatsKit/Sources/OpenStatsUI/State/SettingsDocument.swift +++ b/Packages/OpenStatsKit/Sources/OpenStatsUI/State/SettingsDocument.swift @@ -17,6 +17,7 @@ public struct SettingsDocument: Codable, Equatable, Sendable { public var lidModeBatteryFloor: Int? public var fanSafetyTemperature: Int? public var appearance: String? + public var showDockIcon: Bool? public var menuBarLayout: String? public var hiddenPopoverSections: [String]? public var probeEnabled: Bool? @@ -50,6 +51,7 @@ extension AppSettings { doc.lidModeBatteryFloor = lidModeBatteryFloor doc.fanSafetyTemperature = fanSafetyTemperature doc.appearance = appearance.rawValue + doc.showDockIcon = showDockIcon doc.menuBarLayout = menuBarLayout.rawValue doc.hiddenPopoverSections = hiddenPopoverSections.map(\.rawValue).sorted() doc.probeEnabled = probeEnabled @@ -93,6 +95,7 @@ extension AppSettings { assign(\.lidModeBatteryFloor, option(doc.lidModeBatteryFloor, in: Self.batteryFloorOptions)) assign(\.fanSafetyTemperature, option(doc.fanSafetyTemperature, in: Self.fanSafetyOptions)) assign(\.appearance, doc.appearance.flatMap(AppearanceMode.init(rawValue:))) + assign(\.showDockIcon, doc.showDockIcon) assign(\.menuBarLayout, doc.menuBarLayout.flatMap(MenuBarLayout.init(rawValue:))) assign(\.hiddenPopoverSections, doc.hiddenPopoverSections.map { Set($0.compactMap(PopoverSection.init(rawValue:))) }) assign(\.probeEnabled, doc.probeEnabled) diff --git a/README.md b/README.md index ae5f8c7..1f8d4da 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,18 @@ system language by default; switch it in Settings → General → Language. -Latest release **0.4.0** (2026-09-16) · [full changelog](CHANGELOG.md) (kept in Chinese) +Latest release **0.4.0** (2026-09-16) · **1** changes in development · [full changelog](CHANGELOG.md) (kept in Chinese)
+
2026-09-17 · Unreleased · 1 changed + +**Changed** + +- 程序坞默认不再显示 OpenStats 图标:以前打开主窗口(比如从风扇弹窗进入温度与风扇页)时,图标会出现在程序坞与 ⌘Tab 里,关窗后才消失。现在和其他菜单栏工具一样始终只在菜单栏运行,主窗口照常打开并置于最前。想从程序坞或 ⌘Tab 切回主窗口的,可以在「设置 · 通用」打开“在程序坞显示图标”,开关立即生效。 + + + +
2026-09-16 · 0.4.0 · 1 fixed · 2 changed · 6 style · 1 added **Fixed** @@ -98,16 +107,6 @@ Latest release **0.4.0** (2026-09-16) · [full changelog](CHANGELOG.md) (kept in
-
-2026-09-15 · 0.3.1 · 2 added - -**Added** - -- 支持 Intel 芯片的 Mac:分别发布 Apple 芯片版与 Intel 版安装包,官网与 Homebrew 按芯片提供下载(Homebrew 自动选择)。Intel 机型需要 macOS 14 Sonoma 或更高版本;用 Apple 智能解释进程只能在 Apple 芯片上使用,Intel 机型的 CPU 不分性能核与能效核,部分功耗与频率读数可能不显示。 -- 在线升级按芯片下载对应的安装包,并在安装前核对安装包支持这台 Mac 的芯片;在 Apple 芯片上经 Rosetta 运行的 Intel 版会升级为 Apple 芯片版。 - -
- ## Activity diff --git a/README.zh-CN.md b/README.zh-CN.md index eef8b66..3086b52 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -55,9 +55,18 @@ CPU 不分性能核与能效核,部分功耗与频率读数可能不显示。 -最新版本 **0.4.0**(2026-09-16) · [完整更新日志](CHANGELOG.md) +最新版本 **0.4.0**(2026-09-16) · 开发中 **1** 项改动尚未发布 · [完整更新日志](CHANGELOG.md)
+2026-09-17 · 未发布 · 调整 1 + +**调整** + +- 程序坞默认不再显示 OpenStats 图标:以前打开主窗口(比如从风扇弹窗进入温度与风扇页)时,图标会出现在程序坞与 ⌘Tab 里,关窗后才消失。现在和其他菜单栏工具一样始终只在菜单栏运行,主窗口照常打开并置于最前。想从程序坞或 ⌘Tab 切回主窗口的,可以在「设置 · 通用」打开“在程序坞显示图标”,开关立即生效。 + +
+ +
2026-09-16 · 0.4.0 · 修复 1 · 调整 2 · 样式 6 · 新增 1 **修复** @@ -94,16 +103,6 @@ CPU 不分性能核与能效核,部分功耗与频率读数可能不显示。
-
-2026-09-15 · 0.3.1 · 新增 2 - -**新增** - -- 支持 Intel 芯片的 Mac:分别发布 Apple 芯片版与 Intel 版安装包,官网与 Homebrew 按芯片提供下载(Homebrew 自动选择)。Intel 机型需要 macOS 14 Sonoma 或更高版本;用 Apple 智能解释进程只能在 Apple 芯片上使用,Intel 机型的 CPU 不分性能核与能效核,部分功耗与频率读数可能不显示。 -- 在线升级按芯片下载对应的安装包,并在安装前核对安装包支持这台 Mac 的芯片;在 Apple 芯片上经 Rosetta 运行的 Intel 版会升级为 Apple 芯片版。 - -
- ## 活跃度