aboutsummaryrefslogtreecommitdiff
path: root/src/service.vala
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2015-02-11 15:47:12 -0600
committerTed Gould <ted@gould.cx>2015-02-11 15:47:12 -0600
commit10d44ff66a7efb25cd2f69300ed04e97b084034f (patch)
treeb8298900d2d72ead4471ba9a32abd2e2af9beb20 /src/service.vala
parent48117fc3ea085d123567ccb621809f43a4358938 (diff)
downloadayatana-indicator-sound-10d44ff66a7efb25cd2f69300ed04e97b084034f.tar.gz
ayatana-indicator-sound-10d44ff66a7efb25cd2f69300ed04e97b084034f.tar.bz2
ayatana-indicator-sound-10d44ff66a7efb25cd2f69300ed04e97b084034f.zip
Pulling the mainloop out of the service object
Diffstat (limited to 'src/service.vala')
-rw-r--r--src/service.vala50
1 files changed, 21 insertions, 29 deletions
diff --git a/src/service.vala b/src/service.vala
index da3bf09..4711867 100644
--- a/src/service.vala
+++ b/src/service.vala
@@ -18,7 +18,11 @@
*/
public class IndicatorSound.Service: Object {
- public Service (MediaPlayerList playerlist, VolumeControl volume, AccountsServiceUser? accounts) {
+ Cancellable cancel;
+
+ public Service (MainLoop inloop, MediaPlayerList playerlist, VolumeControl volume, AccountsServiceUser? accounts) {
+ loop = inloop;
+
sync_notification = new Notify.Notification(_("Volume"), "", "audio-volume-muted");
this.notification_server_watch = GLib.Bus.watch_name(GLib.BusType.SESSION,
"org.freedesktop.Notifications",
@@ -89,9 +93,17 @@ public class IndicatorSound.Service: Object {
}
}
});
+
+ Bus.own_name (BusType.SESSION, "com.canonical.indicator.sound", BusNameOwnerFlags.NONE,
+ this.bus_acquired, null, this.name_lost);
}
~Service() {
+ debug("Destroying Service Object");
+
+ cancel.cancel();
+ clear_acts_player();
+
if (this.sound_was_blocked_timeout_id > 0) {
Source.remove (this.sound_was_blocked_timeout_id);
this.sound_was_blocked_timeout_id = 0;
@@ -119,30 +131,6 @@ public class IndicatorSound.Service: Object {
this.accounts_service.player = null;
}
- public int run () {
- if (this.loop != null) {
- warning ("service is already running");
- return 1;
- }
-
- Bus.own_name (BusType.SESSION, "com.canonical.indicator.sound", BusNameOwnerFlags.NONE,
- this.bus_acquired, null, this.name_lost);
-
- this.loop = new MainLoop (null, false);
-
- GLib.Unix.signal_add(GLib.ProcessSignal.TERM, () => {
- debug("SIGTERM recieved, stopping our mainloop");
- this.loop.quit();
- return false;
- });
-
- this.loop.run ();
-
- clear_acts_player();
-
- return 0;
- }
-
public bool visible { get; set; }
public bool allow_amplified_volume {
@@ -488,19 +476,23 @@ public class IndicatorSound.Service: Object {
DBusConnection? bus = null;
uint export_actions = 0;
- void bus_acquired (DBusConnection connection, string name) {
+ void bus_acquired (DBusConnection? connection, string name) {
+ if (connection == null)
+ return;
+
bus = connection;
try {
- export_actions = connection.export_action_group ("/com/canonical/indicator/sound", this.actions);
+ export_actions = bus.export_action_group ("/com/canonical/indicator/sound", this.actions);
} catch (Error e) {
critical ("%s", e.message);
}
- this.menus.@foreach ( (profile, menu) => menu.export (connection, @"/com/canonical/indicator/sound/$profile"));
+ return;
+ this.menus.@foreach ( (profile, menu) => menu.export (bus, @"/com/canonical/indicator/sound/$profile"));
}
- void name_lost (DBusConnection connection, string name) {
+ void name_lost (DBusConnection? connection, string name) {
this.loop.quit ();
}