aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharles kerr <charlesk@canonical.com>2015-12-31 13:05:06 -0600
committercharles kerr <charlesk@canonical.com>2015-12-31 13:05:06 -0600
commitcbdeea528675b55b634aa9b15f94e64d36c99924 (patch)
treea59ef2744abb62619e91f01da56833f64b93a07c
parent49bd2eb793b65f4458af05ac75aff0d0cdfd8f5c (diff)
downloadayatana-indicator-sound-cbdeea528675b55b634aa9b15f94e64d36c99924.tar.gz
ayatana-indicator-sound-cbdeea528675b55b634aa9b15f94e64d36c99924.tar.bz2
ayatana-indicator-sound-cbdeea528675b55b634aa9b15f94e64d36c99924.zip
simplify some code in volume-warning and volume-warning-pulse
-rw-r--r--src/volume-warning-pulse.vala36
-rw-r--r--src/volume-warning.vala73
2 files changed, 46 insertions, 63 deletions
diff --git a/src/volume-warning-pulse.vala b/src/volume-warning-pulse.vala
index 9e0664c..c0a1b1a 100644
--- a/src/volume-warning-pulse.vala
+++ b/src/volume-warning-pulse.vala
@@ -39,7 +39,7 @@ public class VolumeWarningPulse : VolumeWarning
~VolumeWarningPulse () {
clear_timer (ref _pulse_reconnect_timer);
clear_timer (ref _update_sink_timer);
- clear_timer (ref _update_sink_inputs_timer);
+ clear_timer (ref _pending_sink_inputs_timer);
pulse_disconnect ();
}
@@ -62,15 +62,11 @@ public class VolumeWarningPulse : VolumeWarning
_pulse_context.set_sink_volume_by_index (index, cvol);
}
- /***
- **** PulseAudio: Tracking the active multimedia sink input
- ***/
-
private unowned PulseAudio.GLibMainLoop _pgloop = null;
private PulseAudio.Context _pulse_context = null;
private uint _pulse_reconnect_timer = 0;
private uint _update_sink_timer = 0;
- private uint _update_sink_inputs_timer = 0;
+ private uint _pending_sink_inputs_timer = 0;
private GenericSet<uint32> _pending_sink_inputs = new GenericSet<uint32>(direct_hash, direct_equal);
private uint soon_interval_msec = 500;
@@ -105,29 +101,21 @@ public class VolumeWarningPulse : VolumeWarning
private void set_multimedia_sink_index (uint32 index) {
- if (index == PulseAudio.INVALID_INDEX) {
- _multimedia_sink_index = PulseAudio.INVALID_INDEX;
- multimedia_volume = PulseAudio.Volume.INVALID;
- } else if (_multimedia_sink_index != index) {
+ if (_multimedia_sink_index != index) {
_multimedia_sink_index = index;
+
multimedia_volume = PulseAudio.Volume.INVALID;
- update_multimedia_volume_soon ();
+ if (index != PulseAudio.INVALID_INDEX)
+ update_multimedia_volume_soon ();
}
}
/***/
private bool is_active_multimedia (SinkInputInfo i) {
+ return (i.corked == 0) &&
+ (i.proplist.gets(PulseAudio.Proplist.PROP_MEDIA_ROLE) == "multimedia");
- if (i.corked != 0)
- return false;
-
- var key = PulseAudio.Proplist.PROP_MEDIA_ROLE;
- var media_role = i.proplist.gets (key);
- if (media_role != "multimedia")
- return false;
-
- return true;
}
private void clear_multimedia () {
@@ -163,11 +151,11 @@ public class VolumeWarningPulse : VolumeWarning
_pending_sink_inputs.add (index);
- if (_update_sink_inputs_timer == 0) {
- _update_sink_inputs_timer = Timeout.add (soon_interval_msec, () => {
+ if (_pending_sink_inputs_timer == 0) {
+ _pending_sink_inputs_timer = Timeout.add (soon_interval_msec, () => {
+ _pending_sink_inputs_timer = 0;
_pending_sink_inputs.foreach ((i) => update_sink_input (i));
_pending_sink_inputs.remove_all ();
- _update_sink_inputs_timer = 0;
return Source.REMOVE;
});
}
@@ -261,7 +249,7 @@ public class VolumeWarningPulse : VolumeWarning
_pulse_context = new PulseAudio.Context (_pgloop.get_api(), null, props);
_pulse_context.set_state_callback (pulse_context_state_callback);
- var server_string = Environment.get_variable ("PULSE_SERVER");
+ unowned string server_string = Environment.get_variable ("PULSE_SERVER");
if (_pulse_context.connect (server_string, Context.Flags.NOFAIL, null) < 0)
GLib.warning ("pa_context_connect() failed: %s\n", PulseAudio.strerror(_pulse_context.errno()));
}
diff --git a/src/volume-warning.vala b/src/volume-warning.vala
index d7f0e79..3c0f1e6 100644
--- a/src/volume-warning.vala
+++ b/src/volume-warning.vala
@@ -48,13 +48,14 @@ public abstract class VolumeWarning : Object
_options = options;
- init_all_properties ();
+ init_high_volume ();
+ init_approved ();
_notification.user_responded.connect ((n, r) => on_user_response (r));
}
~VolumeWarning () {
- stop_all_timers ();
+ clear_timer (ref _approved_timer);
}
/***
@@ -82,34 +83,29 @@ public abstract class VolumeWarning : Object
}
}
- /***
- ****
- ***/
-
private IndicatorSound.Options _options;
- private void init_all_properties ()
- {
- init_high_volume ();
- init_approved ();
- }
-
- private void stop_all_timers ()
- {
- stop_approved_timer ();
- }
-
/**
*** HIGH VOLUME PROPERTY
**/
private void init_high_volume () {
- this.notify["multimedia-volume"].connect (() => update_high_volume ());
- this.notify["multimedia-active"].connect (() => update_high_volume ());
- this.notify["headphones-active"].connect (() => update_high_volume ());
- this.notify["high-volume-approved"].connect (() => update_high_volume ());
- _options.notify["loud-volume"].connect (() => update_high_volume ());
- _options.notify["loud-warning-enabled"].connect (() => update_high_volume ());
+ const string self_keys[] = {
+ "multimedia-volume",
+ "multimedia-active",
+ "headphones-active",
+ "high-volume-approved"
+ };
+ foreach (var key in self_keys)
+ this.notify[key].connect (() => update_high_volume ());
+
+ const string options_keys[] = {
+ "loud-volume",
+ "loud-warning-enabled"
+ };
+ foreach (var key in options_keys)
+ _options.notify[key].connect (() => update_high_volume ());
+
update_high_volume ();
}
@@ -158,23 +154,22 @@ public abstract class VolumeWarning : Object
update_approved_timer ();
}
private void update_approved_timer () {
- stop_approved_timer ();
- if (_approved_at != 0) {
- int64 expires_at = _approved_at + _approved_ttl_usec;
- int64 now = GLib.get_monotonic_time ();
- if (expires_at > now) {
- var seconds_left = 1 + ((expires_at - now) / 1000000);
- _approved_timer = Timeout.add_seconds ((uint)seconds_left, on_approved_timer);
- }
- }
- }
- private void stop_approved_timer () {
+
clear_timer (ref _approved_timer);
- }
- private bool on_approved_timer () {
- _approved_timer = 0;
- update_approved ();
- return Source.REMOVE;
+
+ if (_approved_at == 0)
+ return;
+
+ int64 expires_at = _approved_at + _approved_ttl_usec;
+ int64 now = GLib.get_monotonic_time ();
+ if (expires_at > now) {
+ var seconds_left = 1 + ((expires_at - now) / 1000000);
+ _approved_timer = Timeout.add_seconds ((uint)seconds_left, () => {
+ _approved_timer = 0;
+ update_approved ();
+ return Source.REMOVE;
+ });
+ }
}
private void update_approved () {
var new_approved = calculate_approved ();