aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/service.vala4
-rw-r--r--src/sound-menu.vala16
2 files changed, 12 insertions, 8 deletions
diff --git a/src/service.vala b/src/service.vala
index 1b3a81a..f43a1a1 100644
--- a/src/service.vala
+++ b/src/service.vala
@@ -34,8 +34,8 @@ public class IndicatorSound.Service {
this.actions.add_action (this.create_mic_volume_action ());
this.menus = new HashTable<string, SoundMenu> (str_hash, str_equal);
- this.menus.insert ("desktop", new SoundMenu ("indicator.desktop-settings"));
- this.menus.insert ("phone", new SoundMenu ("indicator.phone-settings"));
+ this.menus.insert ("desktop", new SoundMenu (true, "indicator.desktop-settings"));
+ this.menus.insert ("phone", new SoundMenu (false, "indicator.phone-settings"));
this.menus.@foreach ( (profile, menu) => {
this.volume_control.bind_property ("active-mic", menu, "show-mic-volume", BindingFlags.SYNC_CREATE);
diff --git a/src/sound-menu.vala b/src/sound-menu.vala
index b08db93..fe61cdf 100644
--- a/src/sound-menu.vala
+++ b/src/sound-menu.vala
@@ -22,14 +22,15 @@ extern Variant? g_icon_serialize (Icon icon);
class SoundMenu: Object
{
- public SoundMenu (string settings_action) {
+ public SoundMenu (bool show_mute, string settings_action) {
/* A sound menu always has at least two sections: the volume section (this.volume_section)
* at the start of the menu, and the settings section at the end. Between those two,
* it has a dynamic amount of player sections, one for each registered player.
*/
this.volume_section = new Menu ();
- volume_section.append (_("Mute"), "indicator.mute");
+ if (show_mute)
+ volume_section.append (_("Mute"), "indicator.mute");
volume_section.append_item (this.create_slider_menu_item ("indicator.volume", 0.0, 1.0, 0.01,
"audio-volume-low-zero-panel",
"audio-volume-high-panel"));
@@ -58,17 +59,19 @@ class SoundMenu: Object
public bool show_mic_volume {
get {
- return this.volume_section.get_n_items () == 3;
+ return this.mic_volume_shown;
}
set {
- if (value && this.volume_section.get_n_items () < 3) {
+ if (value && !this.mic_volume_shown) {
var slider = this.create_slider_menu_item ("indicator.mic-volume", 0.0, 1.0, 0.01,
"audio-input-microphone-low-zero-panel",
"audio-input-microphone-high-panel");
volume_section.append_item (slider);
+ this.mic_volume_shown = true;
}
- else if (!value && this.volume_section.get_n_items () > 2) {
- this.volume_section.remove (2);
+ else if (!value && this.mic_volume_shown) {
+ this.volume_section.remove (this.volume_section.get_n_items () -1);
+ this.mic_volume_shown = false;
}
}
}
@@ -105,6 +108,7 @@ class SoundMenu: Object
Menu root;
Menu menu;
Menu volume_section;
+ bool mic_volume_shown;
/* returns the position in this.menu of the section that's associated with @player */
int find_player_section (MediaPlayer player) {