diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 35 |
1 files changed, 30 insertions, 5 deletions
@@ -9,7 +9,7 @@ #include "indicator-sound-service.h" #include "config.h" -gboolean +static gboolean sigterm_handler (gpointer data) { g_debug("Got SIGTERM"); @@ -17,15 +17,32 @@ sigterm_handler (gpointer data) return G_SOURCE_REMOVE; } +static void +name_lost (GDBusConnection * connection, const gchar * name, gpointer user_data) +{ + g_debug("Name lost"); + g_main_loop_quit((GMainLoop *)user_data); +} + int main (int argc, char ** argv) { GMainLoop * loop = NULL; IndicatorSoundService* service = NULL; + GDBusConnection * bus = NULL; bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); setlocale (LC_ALL, ""); bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + /* Grab DBus */ + GError * error = NULL; + bus = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); + if (error != NULL) { + g_error("Unable to get session bus: %s", error->message); + g_error_free(error); + return -1; + } + /* Build Mainloop */ loop = g_main_loop_new(NULL, FALSE); @@ -46,15 +63,23 @@ main (int argc, char ** argv) { VolumeControlPulse * volume = volume_control_pulse_new(); - service = indicator_sound_service_new (loop, playerlist, volume, accounts); + service = indicator_sound_service_new (playerlist, volume, accounts); + + g_bus_own_name_on_connection(bus, + "com.canonical.indicator.sound", + G_BUS_NAME_OWNER_FLAGS_NONE, + NULL, /* acquired */ + name_lost, + loop, + NULL); g_main_loop_run(loop); - g_object_unref(playerlist); + g_clear_object(&playerlist); g_clear_object(&accounts); - g_object_unref(service); + g_clear_object(&service); + g_clear_object(&bus); return 0; } - |