aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib/client.c
diff options
context:
space:
mode:
authorEvgeni Golov <evgeni@debian.org>2010-07-01 11:29:13 +0200
committerEvgeni Golov <evgeni@debian.org>2010-07-01 11:29:13 +0200
commit983a91c50de70a528edafa6fc05dfa9ffcc13b98 (patch)
tree8da346cb82d9cb9bdf8b6c3500f88839c3c215a9 /libdbusmenu-glib/client.c
parent5259846f36df1eb4703c56cae6a08a4bd0b4ed15 (diff)
parent6830905830ac78271515c586442a090cf7a0e3ff (diff)
downloadlibdbusmenu-983a91c50de70a528edafa6fc05dfa9ffcc13b98.tar.gz
libdbusmenu-983a91c50de70a528edafa6fc05dfa9ffcc13b98.tar.bz2
libdbusmenu-983a91c50de70a528edafa6fc05dfa9ffcc13b98.zip
Merge Ubuntu.
Preserve Maintainer and Vcs-* fields. From Ubuntu: * New upstream release. * Adding support for menu shortcuts (LP: #591293) * Fixing distcheck of documentation builds * Autogen.sh fix for adding custom prefix (LP: #595565) * Fixing children property name to match spec (LP: #597321) * Merging in Debian branch * debian/control: Switching branch on this branch to be the dbusmenu-team. * debian/rules: Updating shlibs to 0.3.3 for shortcut API additions
Diffstat (limited to 'libdbusmenu-glib/client.c')
-rw-r--r--libdbusmenu-glib/client.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c
index c0d3b7a..fa233a4 100644
--- a/libdbusmenu-glib/client.c
+++ b/libdbusmenu-glib/client.c
@@ -30,6 +30,8 @@ License version 3 and version 2.1 along with this program. If not, see
#include "config.h"
#endif
+#include <dbus/dbus-glib-bindings.h>
+
#include <libxml/parser.h>
#include <libxml/tree.h>
@@ -397,6 +399,25 @@ dbus_owner_change (DBusGProxy * proxy, const gchar * name, const gchar * prev, c
return build_proxies(client);
}
+/* This is the response to see if the name has an owner. If
+ it does, then we should build the proxies here. Race condition
+ check. */
+static void
+name_owner_check (DBusGProxy *proxy, gboolean has_owner, GError *error, gpointer userdata)
+{
+ if (error != NULL) {
+ return;
+ }
+
+ if (!has_owner) {
+ return;
+ }
+
+ DbusmenuClient * client = DBUSMENU_CLIENT(userdata);
+ build_proxies(client);
+ return;
+}
+
/* This function builds the DBus proxy which will look out for
the service coming up. */
static void
@@ -426,6 +447,13 @@ build_dbus_proxy (DbusmenuClient * client)
dbus_g_proxy_connect_signal(priv->dbusproxy, "NameOwnerChanged",
G_CALLBACK(dbus_owner_change), client, NULL);
+ /* Now let's check to make sure we're not in some race
+ condition case. */
+ org_freedesktop_DBus_name_has_owner_async(priv->dbusproxy,
+ priv->dbus_name,
+ name_owner_check,
+ client);
+
return;
}