Extension/Mixer/Panel/Widget: Code clean-up.
[AdvancedVolumeMixer.git] / extension.js
blob837fc837deb13bea26e1bb5d1e58a854f93c4421
1 // extension.js
2 // vi: et sw=2
3 //
4 // Advanced Volume Mixer
5 // Control programs' volume from gnome volume mixer applet.
6 //
7 // Author: Harry Karvonen <harry.karvonen@gmail.com>
8 //
10 const Main = imports.ui.main;
11 const Lang = imports.lang;
13 const AVM = imports.misc.extensionUtils.getCurrentExtension();
14 const Settings = AVM.imports.settings;
15 const Panel = AVM.imports.panel;
16 const Mixer = AVM.imports.mixer;
18 let menu;
19 let advMixer;
20 let orgIndicator;
22 function init() {
23   menu = null;
24   advMixer = null;
25   orgIndicator = null;
27   Settings.init();
28   Settings.gsettings.connect("changed::", function() {
29     disable();
30     enable();
31   });
35 function enable() {
36   advMixer = new Mixer.AdvancedVolumeMixer();
38   let pos = Settings.gsettings.get_enum("position");
40   if (pos <= 2) {
41     menu = new Panel.AdvancedVolumeMixerStatusButton(advMixer);
43     if (pos == 0) {
44       Main.panel.addToStatusArea("AdvancedVolumeMixer", menu, 999, 'left');
45     } else if (pos == 1) {
46       Main.panel.addToStatusArea("AdvancedVolumeMixer", menu, 999, 'center');
47     } else {
48       Main.panel.addToStatusArea("AdvancedVolumeMixer", menu);
49     }
50   } else {
51     advMixer.separatorLastItem(true);
53     orgIndicator = Main.panel.statusArea.aggregateMenu._volume;
54     orgIndicator.menu.addMenuItem(advMixer);
55     orgIndicator._volumeMenu.actor.hide();
56   }
61 function disable() {
62   if (orgIndicator) {
63     orgIndicator._volumeMenu.actor.show();
64     orgIndicator = null;
65   }
67   if (advMixer) {
68     advMixer.destroy();
69     advMixer = null;
70   }
72   if (menu) {
73     menu.destroy();
74     menu = null;
75   }