From 407c63c08ab7c08085230712cf0d1020f01f1cc3 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 14 Oct 2014 14:09:00 -0500 Subject: fix notify get-capabilities startup blocking bug found in testing --- src/notifier.c | 56 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/notifier.c b/src/notifier.c index 993e332..b0fce15 100644 --- a/src/notifier.c +++ b/src/notifier.c @@ -76,6 +76,8 @@ typedef struct GDBusConnection * bus; DbusBattery * dbus_battery; /* com.canonical.indicator.power.Battery skeleton */ + + guint notify_init_tag; } IndicatorPowerNotifierPrivate; @@ -332,6 +334,12 @@ my_dispose (GObject * o) IndicatorPowerNotifier * const self = INDICATOR_POWER_NOTIFIER(o); priv_t * const p = get_priv (self); + if (p->notify_init_tag) + { + g_source_remove(p->notify_init_tag); + p->notify_init_tag = 0; + } + indicator_power_notifier_set_bus (self, NULL); notification_clear (self); indicator_power_notifier_set_battery (self, NULL); @@ -354,6 +362,35 @@ my_finalize (GObject * o G_GNUC_UNUSED) **** Instantiation ***/ +static gboolean +notify_init_idle (gpointer gself) +{ + IndicatorPowerNotifier * self = INDICATOR_POWER_NOTIFIER(gself); + + actions_supported = FALSE; + + if (!notify_init("indicator-power-service")) + { + g_critical("Unable to initialize libnotify! Notifications might not be shown."); + } + else + { + GList * caps; + GList * l; + + /* see if actions are supported */ + caps = notify_get_server_caps(); + for (l=caps; l!=NULL && !actions_supported; l=l->next) + if (!g_strcmp0(l->data, "actions")) + actions_supported = TRUE; + + g_list_free_full(caps, g_free); + } + + get_priv(self)->notify_init_tag = 0; + return G_SOURCE_REMOVE; +} + static void indicator_power_notifier_init (IndicatorPowerNotifier * self) { @@ -367,24 +404,7 @@ indicator_power_notifier_init (IndicatorPowerNotifier * self) if (!instance_count++) { - actions_supported = FALSE; - - if (!notify_init("indicator-power-service")) - { - g_critical("Unable to initialize libnotify! Notifications might not be shown."); - } - else - { - GList * caps; - GList * l; - - /* see if actions are supported */ - caps = notify_get_server_caps(); - for (l=caps; l!=NULL && !actions_supported; l=l->next) - if (!g_strcmp0(l->data, "actions")) - actions_supported = TRUE; - g_list_free_full(caps, g_free); - } + p->notify_init_tag = g_idle_add (notify_init_idle, self); } } -- cgit v1.2.3