From 5af8bf27885d35d9027e961ea516a5dd4cfe9d53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 23 Feb 2018 23:58:22 +0100 Subject: [PATCH] volume: Add back sound feedback on scroll Commit 8d4855f1008 accidentally removed the volume change feedback for scroll events. Add it back to be consistent again with moving the slider via arrow keys, slider drags/clicks and gsd's media keys handling. https://gitlab.gnome.org/GNOME/gnome-shell/issues/53 --- js/ui/status/volume.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js index 0f4611898..48ae45a9a 100644 --- a/js/ui/status/volume.js +++ b/js/ui/status/volume.js @@ -1,7 +1,7 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* exported Indicator */ -const { Clutter, Gio, GObject, Gvc, St } = imports.gi; +const { Clutter, Gio, GLib, GObject, Gvc, St } = imports.gi; const Signals = imports.signals; const Main = imports.ui.main; @@ -30,6 +30,9 @@ var StreamSlider = class { this.item = new PopupMenu.PopupBaseMenuItem({ activate: false }); + this._inDrag = false; + this._notifyVolumeChangeId = 0; + this._slider = new Slider.Slider(0); this._soundSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.sound' }); @@ -38,7 +41,11 @@ var StreamSlider = class { this._sliderChangedId = this._slider.connect('notify::value', this._sliderChanged.bind(this)); - this._slider.connect('drag-end', this._notifyVolumeChange.bind(this)); + this._slider.connect('drag-begin', () => (this._inDrag = true)); + this._slider.connect('drag-end', () => { + this._inDrag = false; + this._notifyVolumeChange(); + }); this._icon = new St.Icon({ style_class: 'popup-menu-icon' }); this.item.add(this._icon); @@ -116,6 +123,16 @@ var StreamSlider = class { this._stream.change_is_muted(false); } this._stream.push_volume(); + + if (!this._notifyVolumeChangeId && !this._inDrag) { + this._notifyVolumeChangeId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 30, () => { + this._notifyVolumeChange(); + this._notifyVolumeChangeId = 0; + return GLib.SOURCE_REMOVE; + }); + GLib.Source.set_name_by_id(this._notifyVolumeChangeId, + '[gnome-shell] this._notifyVolumeChangeId'); + } } _notifyVolumeChange() {