Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 59 additions & 14 deletions extension.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
const ExtensionUtils = imports.misc.extensionUtils;
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
Expand All @@ -8,10 +9,8 @@ const GObject = imports.gi.GObject;
const Me = ExtensionUtils.getCurrentExtension();
const Utils = Me.imports.utils;

const AudioOutputSubMenu = GObject.registerClass(
class AudioOutputSubMenu extends PopupMenu.PopupSubMenuMenuItem {
_init() {
super._init("Audio Output: Connecting...", true);
const AbstractAudioOutputSubMenu = {
_init: function() {
this._control = Main.panel.statusArea.aggregateMenu._volume._control;

this._controlSignal = this._control.connect('default-sink-changed', () => {
Expand All @@ -29,18 +28,18 @@ const AudioOutputSubMenu = GObject.registerClass(
//Unless there is at least one item here, no 'open' will be emitted...
let item = new PopupMenu.PopupMenuItem('Connecting...');
this.menu.addMenuItem(item);
}

_updateDefaultSink() {
},
_updateDefaultSink: function() {
let defsink = this._control.get_default_sink();
//Unfortunately, Gvc neglects some pulse-devices, such as all "Monitor of ..."
if (!defsink)
this.label.set_text("Other");
else
this.label.set_text(defsink.get_description());
}

_updateSinkList() {
},
_updateSinkList: function() {
this.menu.removeAll();

let defsink = this._control.get_default_sink();
Expand All @@ -62,13 +61,59 @@ const AudioOutputSubMenu = GObject.registerClass(
let item = new PopupMenu.PopupMenuItem("No more Devices");
this.menu.addMenuItem(item);
}
}
},

destroy() {
destroy: function() {
this._control.disconnect(this._controlSignal);
super.destroy();
}
});
};

let AudioOutputSubMenu;
try {
AudioOutputSubMenu = GObject.registerClass(
class AudioOutputSubMenu extends PopupMenu.PopupSubMenuMenuItem {
_init() {
super._init("Audio Output: Connecting...", true);
AbstractAudioOutputSubMenu._init.call(this);
}

_updateDefaultSink() {
AbstractAudioOutputSubMenu._updateDefaultSink.call(this);
}

_updateSinkList() {
AbstractAudioOutputSubMenu._updateSinkList.call(this);
}

destroy() {
AbstractAudioOutputSubMenu.destroy.call(this);
super.destroy();
}
});
} catch(err) {
AudioOutputSubMenu = new Lang.Class({
Name: 'AudioOutputSubMenu',
Extends: PopupMenu.PopupSubMenuMenuItem,

_init: function() {
this.parent("Audio Output: Connecting...", true);
AbstractAudioOutputSubMenu._init.call(this);
},

_updateDefaultSink: function() {
AbstractAudioOutputSubMenu._updateDefaultSink.call(this);
},

_updateSinkList: function() {
AbstractAudioOutputSubMenu._updateSinkList.call(this);
},

destroy: function() {
AbstractAudioOutputSubMenu.destroy.call(this);
this.parent();
}
});
}

let sinkIndex = 0;
let settings = null;
Expand Down