volume: Add smooth scrolling to adjust output volume

Allow users to smoothly scroll on the volume indicator icon
to adjust the volume. Do this by simply passing the scroll
event to the slider inside the menu.

https://bugzilla.gnome.org/show_bug.cgi?id=687573
This commit is contained in:
Jasper St. Pierre
2012-11-04 10:53:23 -05:00
parent 7d4e14f384
commit 8d4855f100
2 changed files with 9 additions and 22 deletions

@ -636,7 +636,7 @@ const PopupSliderMenuItem = new Lang.Class({
return true;
},
_onScrollEvent: function (actor, event) {
scroll: function(event) {
let direction = event.get_scroll_direction();
let delta;
@ -655,10 +655,15 @@ const PopupSliderMenuItem = new Lang.Class({
}
this._value = Math.min(Math.max(0, this._value + delta), 1);
this._slider.queue_repaint();
this.emit('value-changed', this._value);
},
_onScrollEvent: function(actor, event) {
this.scroll(event);
},
_motionEvent: function(actor, event) {
let absX, absY;
[absX, absY] = event.get_coords();

@ -69,26 +69,8 @@ const VolumeMenu = new Lang.Class({
this._onControlStateChanged();
},
scroll: function(direction) {
let currentVolume = this._output.volume;
if (direction == Clutter.ScrollDirection.DOWN) {
let prev_muted = this._output.is_muted;
this._output.volume = Math.max(0, currentVolume - this._volumeMax * VOLUME_ADJUSTMENT_STEP);
if (this._output.volume < 1) {
this._output.volume = 0;
if (!prev_muted)
this._output.change_is_muted(true);
}
this._output.push_volume();
}
else if (direction == Clutter.ScrollDirection.UP) {
this._output.volume = Math.min(this._volumeMax, currentVolume + this._volumeMax * VOLUME_ADJUSTMENT_STEP);
this._output.change_is_muted(false);
this._output.push_volume();
}
this._notifyVolumeChange();
scroll: function(event) {
this._outputSlider.scroll(event);
},
_onControlStateChanged: function() {
@ -279,6 +261,6 @@ const Indicator = new Lang.Class({
},
_onScrollEvent: function(actor, event) {
this._volumeMenu.scroll(event.get_scroll_direction());
this._volumeMenu.scroll(event);
}
});