aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-04-03 22:30:03 -0400
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-04-03 22:30:03 -0400
commit7519d2eb92c06b5a88d79a9a8f28b53c33b96c3b (patch)
tree89129ef76c6761e497c06f6e87c62ff8fb2ed72a
parente1d7602cdeabfd4267a6279ec59971905e615a43 (diff)
downloadayatana-indicator-sound-7519d2eb92c06b5a88d79a9a8f28b53c33b96c3b.tar.gz
ayatana-indicator-sound-7519d2eb92c06b5a88d79a9a8f28b53c33b96c3b.tar.bz2
ayatana-indicator-sound-7519d2eb92c06b5a88d79a9a8f28b53c33b96c3b.zip
Always update all player actions
This fixes a bug: only the first player that changed (or was added) in a single main context iteration was updated in update_player_action(). That's because only one source id was used for all idles. Another fix to this would be to keep track of which actions need to be updated. This patch is a bit more brute-force, but that will probably not matter much, as the amount of players is generally small.
-rw-r--r--src/service.vala36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/service.vala b/src/service.vala
index 8f5280e..1590844 100644
--- a/src/service.vala
+++ b/src/service.vala
@@ -124,28 +124,30 @@ public class IndicatorSound.Service {
this.loop.quit ();
}
- bool update_player_action (MediaPlayer player) {
- var builder = new VariantBuilder (new VariantType ("a{sv}"));
- builder.add ("{sv}", "running", new Variant ("b", player.is_running));
- var state = builder.end ();
-
- SimpleAction? action = this.actions.lookup (player.id) as SimpleAction;
- if (action == null) {
- action = new SimpleAction.stateful (player.id, null, state);
- action.activate.connect ( () => { player.launch (); });
- this.actions.insert (action);
- }
- else {
- action.set_state (state);
+ bool update_player_actions () {
+ foreach (var player in this.players) {
+ var builder = new VariantBuilder (new VariantType ("a{sv}"));
+ builder.add ("{sv}", "running", new Variant ("b", player.is_running));
+ var state = builder.end ();
+
+ SimpleAction? action = this.actions.lookup (player.id) as SimpleAction;
+ if (action == null) {
+ action = new SimpleAction.stateful (player.id, null, state);
+ action.activate.connect ( () => { player.launch (); });
+ this.actions.insert (action);
+ }
+ else {
+ action.set_state (state);
+ }
}
this.player_action_update_id = 0;
return false;
}
- void eventually_update_player_action (MediaPlayer player) {
+ void eventually_update_player_actions () {
if (player_action_update_id == 0)
- this.player_action_update_id = Idle.add ( () => this.update_player_action (player) );
+ this.player_action_update_id = Idle.add (this.update_player_actions);
}
void player_added (MediaPlayer player) {
@@ -153,7 +155,7 @@ public class IndicatorSound.Service {
item.set_attribute ("x-canonical-type", "s", "com.canonical.unity.media-player");
this.menu.insert_item (this.menu.get_n_items () -1, item);
- eventually_update_player_action (player);
- player.notify.connect ( () => eventually_update_player_action (player) );
+ eventually_update_player_actions ();
+ player.notify.connect (this.eventually_update_player_actions);
}
}