From e1481295ded3f3cbea4cdc245f348f3d8e925e38 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 15 Jan 2014 16:32:51 +0100 Subject: Don't write 'interested-media-players' on startup IndicatorSound.Service read that gsettings key and inserted the players desktop ids into a MediaPlayerList, which emits "player-added" every time a player is added. This patch makes the service keep track of whether players are added because it is syncing the key or when a player appeared on the bus. --- src/service.vala | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/service.vala b/src/service.vala index 25a7b18..f228746 100644 --- a/src/service.vala +++ b/src/service.vala @@ -42,9 +42,9 @@ public class IndicatorSound.Service { this.volume_control.bind_property ("active-mic", menu, "show-mic-volume", BindingFlags.SYNC_CREATE); }); - this.players.sync (settings.get_strv ("interested-media-players")); + this.sync_preferred_players (); this.settings.changed["interested-media-players"].connect ( () => { - this.players.sync (settings.get_strv ("interested-media-players")); + this.sync_preferred_players (); }); if (settings.get_boolean ("show-notify-osd-on-scroll")) { @@ -86,6 +86,7 @@ public class IndicatorSound.Service { MediaPlayerList players; uint player_action_update_id; Notify.Notification notification; + bool syncing_preferred_players = false; const double volume_step_percentage = 0.06; @@ -281,11 +282,21 @@ public class IndicatorSound.Service { this.player_action_update_id = Idle.add (this.update_player_actions); } + + void sync_preferred_players () { + this.syncing_preferred_players = true; + this.players.sync (settings.get_strv ("interested-media-players")); + this.syncing_preferred_players = false; + } + void update_preferred_players () { - var builder = new VariantBuilder (VariantType.STRING_ARRAY); - foreach (var player in this.players) - builder.add ("s", player.id); - this.settings.set_value ("interested-media-players", builder.end ()); + /* only write the key if we're not getting this call because we're syncing from the key right now */ + if (!this.syncing_preferred_players) { + var builder = new VariantBuilder (VariantType.STRING_ARRAY); + foreach (var player in this.players) + builder.add ("s", player.id); + this.settings.set_value ("interested-media-players", builder.end ()); + } } void player_added (MediaPlayer player) { -- cgit v1.2.3