Version 14
[AdvancedVolumeMixer.git] / extension.js
blobe8a887b6e595cb68fb78631ca327a4e73485c6af
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   orgIndicator = Main.panel.statusArea.aggregateMenu._volume;
39   orgIndicator._volumeMenu.actor.hide();
41   let pos = Settings.gsettings.get_enum("position");
43   if (pos <= 2) {
44     orgIndicator._primaryIndicator.hide();
45     menu = new Panel.AdvancedVolumeMixerStatusButton(advMixer);
47     if (pos == 0) {
48       Main.panel.addToStatusArea("AdvancedVolumeMixer", menu, 999, 'left');
49     } else if (pos == 1) {
50       Main.panel.addToStatusArea("AdvancedVolumeMixer", menu, 999, 'center');
51     } else {
52       Main.panel.addToStatusArea("AdvancedVolumeMixer", menu);
53     }
54   } else {
55     advMixer.separatorLastItem(true);
57     orgIndicator.menu.addMenuItem(advMixer);
58   }
63 function disable() {
64   if (orgIndicator) {
65     orgIndicator._volumeMenu.actor.show();
66     orgIndicator._primaryIndicator.show();
67     orgIndicator = null;
68   }
70   if (advMixer) {
71     advMixer.destroy();
72     advMixer = null;
73   }
75   if (menu) {
76     menu.destroy();
77     menu = null;
78   }