aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2015-03-10 14:15:04 -0500
committerCharles Kerr <charles.kerr@canonical.com>2015-03-10 14:15:04 -0500
commitcbc49b71a9fa14f291057d191ad33ac8e2eb3b00 (patch)
treecc1233f1b9f207777c1ed6c01d14203494e244ff /src/main.c
parent31d3dc42ef25b1ba43a50ace638498b60dedf475 (diff)
downloadayatana-indicator-sound-cbc49b71a9fa14f291057d191ad33ac8e2eb3b00.tar.gz
ayatana-indicator-sound-cbc49b71a9fa14f291057d191ad33ac8e2eb3b00.tar.bz2
ayatana-indicator-sound-cbc49b71a9fa14f291057d191ad33ac8e2eb3b00.zip
in main.c's g_bus_own_name() calls, move service creation/export to bus_acquired_handler to ensure that everything is exported onto the bus before name_acquired_handler is reached
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c56
1 files changed, 35 insertions, 21 deletions
diff --git a/src/main.c b/src/main.c
index 4633b4b..33a92f9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -21,6 +21,8 @@
#include "indicator-sound-service.h"
#include "config.h"
+static IndicatorSoundService * service = NULL;
+
static gboolean
sigterm_handler (gpointer data)
{
@@ -30,16 +32,44 @@ sigterm_handler (gpointer data)
}
static void
-name_lost (GDBusConnection * connection, const gchar * name, gpointer user_data)
+on_name_lost(GDBusConnection * connection,
+ const gchar * name,
+ gpointer user_data)
{
g_warning("Name lost or unable to acquire bus: %s", name);
g_main_loop_quit((GMainLoop *)user_data);
}
+static void
+on_bus_acquired(GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ MediaPlayerList * playerlist = NULL;
+ VolumeControlPulse * volume = NULL;
+ AccountsServiceUser * accounts = NULL;
+
+
+ if (g_strcmp0("lightdm", g_get_user_name()) == 0) {
+ playerlist = MEDIA_PLAYER_LIST(media_player_list_greeter_new());
+ } else {
+ playerlist = MEDIA_PLAYER_LIST(media_player_list_mpris_new());
+ accounts = accounts_service_user_new();
+ }
+
+ volume = volume_control_pulse_new();
+
+ service = indicator_sound_service_new (playerlist, volume, accounts);
+
+ g_clear_object(&playerlist);
+ g_clear_object(&volume);
+ g_clear_object(&accounts);
+}
+
int
-main (int argc, char ** argv) {
+main (int argc, char ** argv)
+{
GMainLoop * loop = NULL;
- IndicatorSoundService* service = NULL;
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
setlocale (LC_ALL, "");
@@ -56,30 +86,14 @@ main (int argc, char ** argv) {
g_bus_own_name(G_BUS_TYPE_SESSION,
"com.canonical.indicator.sound",
G_BUS_NAME_OWNER_FLAGS_NONE,
- NULL, /* bus acquired */
+ on_bus_acquired,
NULL, /* name acquired */
- name_lost,
+ on_name_lost,
loop,
NULL);
- MediaPlayerList * playerlist = NULL;
- AccountsServiceUser * accounts = NULL;
-
- if (g_strcmp0("lightdm", g_get_user_name()) == 0) {
- playerlist = MEDIA_PLAYER_LIST(media_player_list_greeter_new());
- } else {
- playerlist = MEDIA_PLAYER_LIST(media_player_list_mpris_new());
- accounts = accounts_service_user_new();
- }
-
- VolumeControlPulse * volume = volume_control_pulse_new();
-
- service = indicator_sound_service_new (playerlist, volume, accounts);
-
g_main_loop_run(loop);
- g_clear_object(&playerlist);
- g_clear_object(&accounts);
g_clear_object(&service);
return 0;