volume.js: make slider menu items activatable
Keeping the volume menu open after setting the desired volume isn't that useful and forces a second click (or an Esc press) to dismiss it. Allow for the sliders to be used with a single click-hold-move-release. https://bugzilla.gnome.org/show_bug.cgi?id=649586
This commit is contained in:
parent
02bfc74c1e
commit
a50c30a4fd
@ -482,8 +482,8 @@ function PopupSliderMenuItem() {
|
|||||||
PopupSliderMenuItem.prototype = {
|
PopupSliderMenuItem.prototype = {
|
||||||
__proto__: PopupBaseMenuItem.prototype,
|
__proto__: PopupBaseMenuItem.prototype,
|
||||||
|
|
||||||
_init: function(value) {
|
_init: function(value, params) {
|
||||||
PopupBaseMenuItem.prototype._init.call(this, { activate: false });
|
PopupBaseMenuItem.prototype._init.call(this, params ? params : { activate: false });
|
||||||
|
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPressEvent));
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ Indicator.prototype = {
|
|||||||
this._outputVolumeId = 0;
|
this._outputVolumeId = 0;
|
||||||
this._outputMutedId = 0;
|
this._outputMutedId = 0;
|
||||||
this._outputTitle = new PopupMenu.PopupMenuItem(_("Volume"), { reactive: false });
|
this._outputTitle = new PopupMenu.PopupMenuItem(_("Volume"), { reactive: false });
|
||||||
this._outputSlider = new PopupMenu.PopupSliderMenuItem(0);
|
this._outputSlider = new VolumeSliderMenuItem(0);
|
||||||
this._outputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_output'));
|
this._outputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_output'));
|
||||||
this._outputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
|
this._outputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
|
||||||
this.menu.addMenuItem(this._outputTitle);
|
this.menu.addMenuItem(this._outputTitle);
|
||||||
@ -54,7 +54,7 @@ Indicator.prototype = {
|
|||||||
this._inputVolumeId = 0;
|
this._inputVolumeId = 0;
|
||||||
this._inputMutedId = 0;
|
this._inputMutedId = 0;
|
||||||
this._inputTitle = new PopupMenu.PopupMenuItem(_("Microphone"), { reactive: false });
|
this._inputTitle = new PopupMenu.PopupMenuItem(_("Microphone"), { reactive: false });
|
||||||
this._inputSlider = new PopupMenu.PopupSliderMenuItem(0);
|
this._inputSlider = new VolumeSliderMenuItem(0);
|
||||||
this._inputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_input'));
|
this._inputSlider.connect('value-changed', Lang.bind(this, this._sliderChanged, '_input'));
|
||||||
this._inputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
|
this._inputSlider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange));
|
||||||
this.menu.addMenuItem(this._inputTitle);
|
this.menu.addMenuItem(this._inputTitle);
|
||||||
@ -231,3 +231,30 @@ Indicator.prototype = {
|
|||||||
this.setIcon(this._volumeToIcon(this._output.volume));
|
this.setIcon(this._volumeToIcon(this._output.volume));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function VolumeSliderMenuItem() {
|
||||||
|
this._init.apply(this, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
VolumeSliderMenuItem.prototype = {
|
||||||
|
__proto__: PopupMenu.PopupSliderMenuItem.prototype,
|
||||||
|
|
||||||
|
_init: function(value) {
|
||||||
|
PopupMenu.PopupSliderMenuItem.prototype._init.call(this, value, { activate: true });
|
||||||
|
|
||||||
|
this.actor.connect('motion-event', Lang.bind(this, this._onMotionEvent));
|
||||||
|
},
|
||||||
|
|
||||||
|
activate: function(event) {
|
||||||
|
this._motionEvent(this.actor, event);
|
||||||
|
this.emit('drag-end');
|
||||||
|
this.emit('activate', event);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onMotionEvent: function(actor, event) {
|
||||||
|
let button_pressed = Shell.get_event_state(event) & Clutter.ModifierType.BUTTON1_MASK;
|
||||||
|
if (button_pressed && !this._dragging)
|
||||||
|
return this._motionEvent(actor, event);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user