From 10b5808f257ba51a0012e6d4803f6e3508e16ba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 8 Feb 2023 01:34:47 +0100 Subject: [PATCH] status/volume: Mute/unmute when clicking icon This behavior was lost with the move to quick settings. Now that we allow slider icons to be interactive, we can easily restore the feature (and even in a less-Easter-eggy way) https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5974 Part-of: --- js/ui/status/volume.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js index 79950458d..078805c3e 100644 --- a/js/ui/status/volume.js +++ b/js/ui/status/volume.js @@ -32,7 +32,9 @@ const StreamSlider = GObject.registerClass({ }, }, class StreamSlider extends QuickSlider { _init(control) { - super._init(); + super._init({ + icon_reactive: true, + }); this._control = control; @@ -54,6 +56,13 @@ const StreamSlider = GObject.registerClass({ this._notifyVolumeChange(); }); + this.connect('icon-clicked', () => { + if (!this._stream) + return; + + this._stream.change_is_muted(!this._stream.is_muted); + }); + this._deviceItems = new Map(); this._deviceSection = new PopupMenu.PopupMenuSection(); @@ -204,6 +213,7 @@ const StreamSlider = GObject.registerClass({ let muted = this._stream.is_muted; this._changeSlider(muted ? 0 : this._stream.volume / this._control.get_vol_max_norm()); + this.iconLabel = muted ? _('Unmute') : _('Mute'); this._updateIcon(); this.emit('stream-updated'); }