From 090f570abae974ef4e1599c03b7a03b2a31e87a3 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Thu, 13 Aug 2026 13:48:51 +0200 Subject: [PATCH] Programmname als Hinweis am Symbol MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seit die Namen aus den Zeilen verschwunden sind, trägt das Symbol die Erkennung allein — und manche Programme erkennt man daran eben nicht. Der Hinweis hängt am Symbol und nicht an der Zeile: die Zeile besteht zum größten Teil aus Regler und Knöpfen, und die verschlucken ihn. Am Symbol kommt er an, und dort sucht man ihn auch. Bei mehreren Tonquellen steht ihre Anzahl dabei. Chrome erscheint als eine Zeile, gibt seinen Ton aber über mehrere Hilfsprozesse aus — die Zahl erklärt, warum ein Regler mehr als einen Prozess bewegt. Co-Authored-By: Claude Opus 5 --- .../Sources/AudioProvider/MixerView.swift | 39 +++++++++++++------ 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/Packages/OnyxKit/Sources/AudioProvider/MixerView.swift b/Packages/OnyxKit/Sources/AudioProvider/MixerView.swift index 51a6058..65f0618 100644 --- a/Packages/OnyxKit/Sources/AudioProvider/MixerView.swift +++ b/Packages/OnyxKit/Sources/AudioProvider/MixerView.swift @@ -198,7 +198,6 @@ private struct ProcessRow: View { resetButton } .contentShape(.rect) - .help(group.name) .contextMenu { if managed { Button { mixer.setManaged(false, for: group.bundleID) } label: { @@ -252,18 +251,34 @@ private struct ProcessRow: View { @ViewBuilder private var icon: some View { // Auch Hilfsprozesse bekommen das Symbol ihres Programms. - if let image = ProcessNaming.icon(bundleID: group.bundleID, - pid: group.processes.first?.pid ?? 0) { - Image(nsImage: image) - .resizable() - .frame(width: 26, height: 26) - .opacity(managed ? 1 : 0.65) - } else { - Image(systemName: "app.dashed") - .font(.system(size: 15)) - .foregroundStyle(Onyx.Color.textTertiary) - .frame(width: 26, height: 26) + Group { + if let image = ProcessNaming.icon(bundleID: group.bundleID, + pid: group.processes.first?.pid ?? 0) { + Image(nsImage: image) + .resizable() + .opacity(managed ? 1 : 0.65) + } else { + Image(systemName: "app.dashed") + .font(.system(size: 15)) + .foregroundStyle(Onyx.Color.textTertiary) + } } + .frame(width: 26, height: 26) + // Der Name hängt am Symbol, nicht an der Zeile: die Zeile besteht zum + // größten Teil aus Regler und Knöpfen, und die verschlucken den + // Hinweis. Am Symbol kommt er an — und dort sucht man ihn auch, wenn + // man das Programm nicht erkennt. + .help(tooltip) + } + + /// Name des Programms, bei mehreren Tonquellen mit ihrer Anzahl. + /// + /// Chrome erscheint als eine Zeile, gibt seinen Ton aber über mehrere + /// Hilfsprozesse aus. Die Zahl erklärt, warum ein Regler mehr als einen + /// Prozess bewegt. + private var tooltip: String { + guard group.processes.count > 1 else { return group.name } + return "\(group.name) (\(group.processes.count))" } }