From 2ad60576f3975fab265bd44751c9af634f51a375 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Sun, 16 Mar 2014 17:43:06 +0100 Subject: Show a red icon in the panel when a sound is playing while mute is on --- src/service.vala | 29 ++++++++++++++++++++++++++++- src/volume-control.vala | 16 ++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/service.vala b/src/service.vala index 2b21275..66bb42f 100644 --- a/src/service.vala +++ b/src/service.vala @@ -113,6 +113,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; @@ -186,7 +188,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-blocked-panel" : "audio-volume-muted-panel"; else if (volume <= 0.0) icon = "audio-volume-low-zero-panel"; else if (volume <= 0.3) @@ -229,6 +231,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) { -- cgit v1.2.3 From 00ff3526be3255b0a942828119761fe0e70c02b5 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Tue, 18 Mar 2014 09:51:40 +0100 Subject: Scale volume in notifications when allow-amplified-volume is set --- src/service.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service.vala b/src/service.vala index 970867f..4c4f6e6 100644 --- a/src/service.vala +++ b/src/service.vala @@ -141,7 +141,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 (); } -- cgit v1.2.3 From ecc5c9ca2ee4ce8f92bd79d3a3a99956f239f63d Mon Sep 17 00:00:00 2001 From: CI bot Date: Tue, 18 Mar 2014 10:01:01 +0000 Subject: Releasing 12.10.2+14.04.20140318-0ubuntu1 --- debian/changelog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/debian/changelog b/debian/changelog index 16c2828..9bd15a9 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +indicator-sound (12.10.2+14.04.20140318-0ubuntu1) trusty; urgency=low + + [ Lars Uebernickel ] + * Show a red icon in the panel when a sound is playing while mute is + on (LP: #1291530) + + -- Ubuntu daily release Tue, 18 Mar 2014 10:01:01 +0000 + indicator-sound (12.10.2+14.04.20140313-0ubuntu1) trusty; urgency=low [ Lars Uebernickel ] -- cgit v1.2.3 From 67c63fc4d15e239d15a76f22b4b6eadc1654e383 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 19 Mar 2014 18:22:09 +0100 Subject: Use audio-volume-mute-blocking-panel instead of *-blocked-panel --- src/service.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/service.vala b/src/service.vala index 507a39e..2b3c84d 100644 --- a/src/service.vala +++ b/src/service.vala @@ -188,7 +188,7 @@ public class IndicatorSound.Service: Object { double volume = this.volume_control.get_volume (); string icon; if (this.volume_control.mute) - icon = this.mute_blocks_sound ? "audio-volume-muted-blocked-panel" : "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) -- cgit v1.2.3 From bef0abe544ecbb9e020b7d9f99255acefa5073ed Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 19 Mar 2014 16:00:43 -0500 Subject: Adding a setting for greeter exporting --- data/com.canonical.indicator.sound.gschema.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/data/com.canonical.indicator.sound.gschema.xml b/data/com.canonical.indicator.sound.gschema.xml index 102a1db..c34dfd6 100644 --- a/data/com.canonical.indicator.sound.gschema.xml +++ b/data/com.canonical.indicator.sound.gschema.xml @@ -48,5 +48,14 @@ Whether or not to show the sound indicator in the menu bar. + + true + Whether or not to export the currently playing song to the greeter. + + If enabled the sound indicator will export the current player and + song to the greeter so that it can be shown if the user is selected + and the sound menu is shown. + + -- cgit v1.2.3 From b237767cb787f20e13fe564d0b07b33c38e58123 Mon Sep 17 00:00:00 2001 From: CI bot Date: Thu, 20 Mar 2014 08:58:30 +0000 Subject: Releasing 12.10.2+14.04.20140320-0ubuntu1 --- debian/changelog | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/debian/changelog b/debian/changelog index 9bd15a9..d878559 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +indicator-sound (12.10.2+14.04.20140320-0ubuntu1) trusty; urgency=low + + [ Lars Uebernickel ] + * Scale volume in notifications when allow-amplified-volume is set + (LP: #1293163) + * Use audio-volume-mute-blocking-panel instead of *-blocked-panel + + -- Ubuntu daily release Thu, 20 Mar 2014 08:58:30 +0000 + indicator-sound (12.10.2+14.04.20140318-0ubuntu1) trusty; urgency=low [ Lars Uebernickel ] -- cgit v1.2.3 From 006c044b3063c905a5c7aa8c31e91a4545acedae Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 20 Mar 2014 11:35:45 -0500 Subject: Connect to the setting for exporting to the greeter to the creation of the accounts service user --- src/service.vala | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/service.vala b/src/service.vala index 6835896..7f4982f 100644 --- a/src/service.vala +++ b/src/service.vala @@ -46,9 +46,9 @@ public class IndicatorSound.Service: Object { this.volume_control.bind_property ("active-mic", menu, "show-mic-volume", BindingFlags.SYNC_CREATE); }); - if (GLib.Environment.get_user_name() != "lightdm") { - accounts_service = new AccountsServiceUser(); - } + /* Setup handling for the greeter-export setting */ + this.settings.changed["greeter-export"].connect( () => this.build_accountsservice() ); + build_accountsservice(); this.sync_preferred_players (); this.settings.changed["interested-media-players"].connect ( () => { @@ -66,6 +66,22 @@ public class IndicatorSound.Service: Object { sharedsettings.bind ("allow-amplified-volume", this, "allow-amplified-volume", SettingsBindFlags.GET); } + void build_accountsservice () { + this.accounts_service = null; + + /* If we're not exporting, don't build anything */ + if (!this.settings.get_boolean("greeter-export")) { + return; + } + + /* If we're on the greeter, don't export */ + if (GLib.Environment.get_user_name() == "lightdm") { + return; + } + + this.accounts_service = new AccountsServiceUser(); + } + public int run () { if (this.loop != null) { warning ("service is already running"); -- cgit v1.2.3