/* ---------------------------------------------------------------------------------------------------- */
static void
+handle_new_name_owner (Client *client,
+ const gchar *name_owner)
+{
+ if (name_owner != NULL)
+ {
+ g_warn_if_fail (client->name_owner == NULL);
+ client->name_owner = name_owner;
+ call_appeared_handler (client);
+ }
+ else
+ {
+ call_vanished_handler (client, FALSE);
+ }
+ client->initialized = TRUE;
+}
+
+static void
get_name_owner_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
g_variant_get (result, "(&s)", &name_owner);
}
- if (name_owner != NULL)
- {
- g_warn_if_fail (client->name_owner == NULL);
- client->name_owner = g_strdup (name_owner);
- call_appeared_handler (client);
- }
- else
- {
- call_vanished_handler (client, FALSE);
- }
-
- client->initialized = TRUE;
+ handle_new_name_owner (client, g_strdup (name_owner));
if (result != NULL)
g_variant_unref (result);
}
else
{
- /* check owner */
- invoke_get_name_owner (client);
+ /* check owner - to avoid race-condition between GetNameOwner reply and
+ NameOwnerChanged signal let's use GetNameOwner sync call on kdbus bus */
+ if (_g_dbus_connection_is_kdbus (client->connection))
+ {
+ gchar *name_owner;
+
+ name_owner = g_dbus_get_name_owner (client->connection,
+ client->name,
+ NULL);
+
+ handle_new_name_owner (client, name_owner);
+ }
+ else
+ {
+ invoke_get_name_owner (client);
+ }
}
}