diff options
author | Ted Gould <ted@gould.cx> | 2014-03-20 11:37:34 -0500 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2014-03-20 11:37:34 -0500 |
commit | 05ea9196dfbb9ea2a2482625103e9cccbd13b0ec (patch) | |
tree | ad372c10cb146cbfca352c343b2338c37999c0b1 /src | |
parent | 006c044b3063c905a5c7aa8c31e91a4545acedae (diff) | |
parent | b237767cb787f20e13fe564d0b07b33c38e58123 (diff) | |
download | ayatana-indicator-sound-05ea9196dfbb9ea2a2482625103e9cccbd13b0ec.tar.gz ayatana-indicator-sound-05ea9196dfbb9ea2a2482625103e9cccbd13b0ec.tar.bz2 ayatana-indicator-sound-05ea9196dfbb9ea2a2482625103e9cccbd13b0ec.zip |
Updating to trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/service.vala | 31 | ||||
-rw-r--r-- | src/volume-control.vala | 16 |
2 files changed, 45 insertions, 2 deletions
diff --git a/src/service.vala b/src/service.vala index 7f4982f..d94aa18 100644 --- a/src/service.vala +++ b/src/service.vala @@ -133,6 +133,8 @@ public class IndicatorSound.Service: Object { VolumeControl volume_control; MediaPlayerList players; uint player_action_update_id; + bool mute_blocks_sound; + uint sound_was_blocked_timeout_id; Notify.Notification notification; bool syncing_preferred_players = false; AccountsServiceUser? accounts_service = null; @@ -162,7 +164,7 @@ public class IndicatorSound.Service: Object { icon = "notification-audio-volume-high"; this.notification.update ("indicator-sound", "", icon); - this.notification.set_hint_int32 ("value", ((int32) (100 * v)).clamp (-1, 101)); + this.notification.set_hint_int32 ("value", ((int32) (100 * v / this.max_volume)).clamp (-1, 101)); try { this.notification.show (); } @@ -207,7 +209,7 @@ public class IndicatorSound.Service: Object { double volume = this.volume_control.get_volume (); string icon; if (this.volume_control.mute) - icon = "audio-volume-muted-panel"; + icon = this.mute_blocks_sound ? "audio-volume-muted-blocking-panel" : "audio-volume-muted-panel"; else if (volume <= 0.0) icon = "audio-volume-low-zero-panel"; else if (volume <= 0.3) @@ -250,6 +252,31 @@ public class IndicatorSound.Service: Object { this.update_root_icon (); }); + this.volume_control.notify["is-playing"].connect( () => { + if (!this.volume_control.mute) { + this.mute_blocks_sound = false; + return; + } + + if (this.volume_control.is_playing) { + this.mute_blocks_sound = true; + } + else if (this.mute_blocks_sound) { + /* Continue to show the blocking icon five seconds after a player has tried to play something */ + if (this.sound_was_blocked_timeout_id > 0) + Source.remove (this.sound_was_blocked_timeout_id); + + this.sound_was_blocked_timeout_id = Timeout.add_seconds (5, () => { + this.mute_blocks_sound = false; + this.sound_was_blocked_timeout_id = 0; + this.update_root_icon (); + return false; + }); + } + + this.update_root_icon (); + }); + return mute_action; } diff --git a/src/volume-control.vala b/src/volume-control.vala index e994922..8f21b60 100644 --- a/src/volume-control.vala +++ b/src/volume-control.vala @@ -31,6 +31,7 @@ public class VolumeControl : Object private PulseAudio.Context context; private bool _mute = true; + private bool _is_playing = false; private double _volume = 0.0; private double _mic_volume = 0.0; @@ -97,6 +98,13 @@ public class VolumeControl : Object this.notify_property ("mute"); } + var playing = (i.state == PulseAudio.SinkState.RUNNING); + if (_is_playing != playing) + { + _is_playing = playing; + this.notify_property ("is-playing"); + } + if (_volume != volume_to_double (i.volume.values[0])) { _volume = volume_to_double (i.volume.values[0]); @@ -235,6 +243,14 @@ public class VolumeControl : Object } } + public bool is_playing + { + get + { + return this._is_playing; + } + } + /* Volume operations */ private static PulseAudio.Volume double_to_volume (double vol) { |