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:
parent
7d4e14f384
commit
8d4855f100
@ -636,7 +636,7 @@ const PopupSliderMenuItem = new Lang.Class({
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onScrollEvent: function (actor, event) {
|
scroll: function(event) {
|
||||||
let direction = event.get_scroll_direction();
|
let direction = event.get_scroll_direction();
|
||||||
let delta;
|
let delta;
|
||||||
|
|
||||||
@ -655,10 +655,15 @@ const PopupSliderMenuItem = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._value = Math.min(Math.max(0, this._value + delta), 1);
|
this._value = Math.min(Math.max(0, this._value + delta), 1);
|
||||||
|
|
||||||
this._slider.queue_repaint();
|
this._slider.queue_repaint();
|
||||||
this.emit('value-changed', this._value);
|
this.emit('value-changed', this._value);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onScrollEvent: function(actor, event) {
|
||||||
|
this.scroll(event);
|
||||||
|
},
|
||||||
|
|
||||||
_motionEvent: function(actor, event) {
|
_motionEvent: function(actor, event) {
|
||||||
let absX, absY;
|
let absX, absY;
|
||||||
[absX, absY] = event.get_coords();
|
[absX, absY] = event.get_coords();
|
||||||
|
@ -69,26 +69,8 @@ const VolumeMenu = new Lang.Class({
|
|||||||
this._onControlStateChanged();
|
this._onControlStateChanged();
|
||||||
},
|
},
|
||||||
|
|
||||||
scroll: function(direction) {
|
scroll: function(event) {
|
||||||
let currentVolume = this._output.volume;
|
this._outputSlider.scroll(event);
|
||||||
|
|
||||||
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();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_onControlStateChanged: function() {
|
_onControlStateChanged: function() {
|
||||||
@ -279,6 +261,6 @@ const Indicator = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
_onScrollEvent: function(actor, event) {
|
_onScrollEvent: function(actor, event) {
|
||||||
this._volumeMenu.scroll(event.get_scroll_direction());
|
this._volumeMenu.scroll(event);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user