aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib/client.c
diff options
context:
space:
mode:
authorKen VanDine <ken.vandine@canonical.com>2010-06-24 11:32:58 -0400
committerKen VanDine <ken.vandine@canonical.com>2010-06-24 11:32:58 -0400
commitd98486469b525ca805d6cabb7a12972f5980aba9 (patch)
treef13d98c0c98e966c081392d8ad936015bd54f1fa /libdbusmenu-glib/client.c
parentc6d95ac4d53118c0a2f4b05c760bd03cc55e8c67 (diff)
parent32f588f06d63bc4742a4718f6212027aface0137 (diff)
downloadlibdbusmenu-d98486469b525ca805d6cabb7a12972f5980aba9.tar.gz
libdbusmenu-d98486469b525ca805d6cabb7a12972f5980aba9.tar.bz2
libdbusmenu-d98486469b525ca805d6cabb7a12972f5980aba9.zip
* 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 * Merge from Ubuntu. Closes: #586069 * debian/control: - Set Maintainer to pkg-ayatana. - Add myself as Uploader. - Update package descriptions. - Standards-Version: 3.8.4 - Fix Homepage URL. - Update Vcs-* fields. * debian/copyright: - Convert to DEP5 format. - Add Ken and Sebastien, according to changelog. - Add Aurélien Gâteau, according to headers.
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;
}