1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-17 08:35:21 -04:00
Files
DankMaterialShell/quickshell/Modules/Settings/SoundsTab.qml
T
Rocho 90f8ce5035 feat(sounds): make muting sounds during media playback configurable (#2652)
Commit e3dbaed started skipping all system sounds (notifications, volume,
power, login) whenever an MPRIS player is playing, with no way to opt out.
Users who rely on notification sounds while listening to music lost them
entirely.

Add a 'Mute During Playback' toggle (SettingsData.muteSoundsWhenMediaPlaying,
default true) so the current behaviour is preserved, but users can disable
it to restore audible sounds while media is playing. The media check is
wrapped in shouldMuteForMedia(), which gates on the new setting before
querying the active player.

Closes #2616
2026-06-16 12:49:51 -04:00

186 lines
7.9 KiB
QML

import QtQuick
import qs.Common
import qs.Services
import qs.Widgets
import qs.Modules.Settings.Widgets
Item {
id: root
DankFlickable {
anchors.fill: parent
clip: true
contentHeight: mainColumn.height + Theme.spacingXL
contentWidth: width
Column {
id: mainColumn
topPadding: 4
width: Math.min(550, parent.width - Theme.spacingL * 2)
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXL
SettingsCard {
tab: "sounds"
tags: ["sound", "audio", "notification", "volume"]
title: I18n.tr("System Sounds")
settingKey: "systemSounds"
iconName: SettingsData.soundsEnabled ? "volume_up" : "volume_off"
visible: AudioService.soundsAvailable
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "enable", "system"]
settingKey: "soundsEnabled"
text: I18n.tr("Enable System Sounds")
description: I18n.tr("Play sounds for system events")
checked: SettingsData.soundsEnabled
onToggled: checked => SettingsData.set("soundsEnabled", checked)
}
Column {
width: parent.width
spacing: Theme.spacingM
visible: SettingsData.soundsEnabled
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.2
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "theme", "system"]
settingKey: "useSystemSoundTheme"
visible: AudioService.gsettingsAvailable
text: I18n.tr("Use System Theme")
description: I18n.tr("Use sound theme from system settings")
checked: SettingsData.useSystemSoundTheme
onToggled: checked => SettingsData.set("useSystemSoundTheme", checked)
}
SettingsDropdownRow {
tab: "sounds"
tags: ["sound", "theme", "select"]
settingKey: "soundTheme"
visible: SettingsData.useSystemSoundTheme && AudioService.availableSoundThemes.length > 0
enabled: SettingsData.useSystemSoundTheme && AudioService.availableSoundThemes.length > 0
text: I18n.tr("Sound Theme")
description: I18n.tr("Select system sound theme")
options: AudioService.availableSoundThemes
currentValue: {
const theme = AudioService.currentSoundTheme;
if (theme && AudioService.availableSoundThemes.includes(theme))
return theme;
return AudioService.availableSoundThemes.length > 0 ? AudioService.availableSoundThemes[0] : "";
}
onValueChanged: value => {
if (value && value !== AudioService.currentSoundTheme)
AudioService.setSoundTheme(value);
}
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.2
visible: AudioService.gsettingsAvailable
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "login", "startup", "boot"]
settingKey: "soundLogin"
text: I18n.tr("Login")
description: I18n.tr("Play sound after logging in")
checked: SettingsData.soundLogin
onToggled: checked => SettingsData.set("soundLogin", checked)
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "notification", "new"]
settingKey: "soundNewNotification"
text: I18n.tr("New Notification")
description: I18n.tr("Play sound when new notification arrives")
checked: SettingsData.soundNewNotification
onToggled: checked => SettingsData.set("soundNewNotification", checked)
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "volume", "changed"]
settingKey: "soundVolumeChanged"
text: I18n.tr("Volume Changed")
description: I18n.tr("Play sound when volume is adjusted")
checked: SettingsData.soundVolumeChanged
onToggled: checked => SettingsData.set("soundVolumeChanged", checked)
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "power", "plugged"]
settingKey: "soundPluggedIn"
visible: BatteryService.batteryAvailable
text: I18n.tr("Plugged In")
description: I18n.tr("Play sound when power cable is connected")
checked: SettingsData.soundPluggedIn
onToggled: checked => SettingsData.set("soundPluggedIn", checked)
}
Rectangle {
width: parent.width
height: 1
color: Theme.outline
opacity: 0.2
}
SettingsToggleRow {
tab: "sounds"
tags: ["sound", "media", "playback", "mute", "mpris", "music"]
settingKey: "muteSoundsWhenMediaPlaying"
text: I18n.tr("Mute During Playback")
description: I18n.tr("Silence system sounds while media is playing")
checked: SettingsData.muteSoundsWhenMediaPlaying
onToggled: checked => SettingsData.set("muteSoundsWhenMediaPlaying", checked)
}
}
}
Rectangle {
width: parent.width
height: notAvailableText.implicitHeight + Theme.spacingM * 2
radius: Theme.cornerRadius
color: Qt.rgba(Theme.warning.r, Theme.warning.g, Theme.warning.b, 0.12)
visible: !AudioService.soundsAvailable
Row {
anchors.fill: parent
anchors.margins: Theme.spacingM
spacing: Theme.spacingM
DankIcon {
name: "info"
size: Theme.iconSizeSmall
color: Theme.warning
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
id: notAvailableText
font.pixelSize: Theme.fontSizeSmall
text: I18n.tr("System sounds are not available. Install %1 for sound support.").arg("qt6-multimedia")
wrapMode: Text.WordWrap
width: parent.width - Theme.iconSizeSmall - Theme.spacingM
anchors.verticalCenter: parent.verticalCenter
}
}
}
}
}
}