ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #00875
[Branch ~dbusmenu-team/dbusmenu/trunk] Rev 70: Better handle errors on dbus and fix one function signature.
Merge authors:
Ted Gould (ted)
Related merge proposals:
https://code.launchpad.net/~ted/dbusmenu/dbus-error-handling/+merge/18949
proposed by: Ted Gould (ted)
review: Approve - Cody Russell (bratsche)
------------------------------------------------------------
revno: 70 [merge]
committer: Ted Gould <ted@xxxxxxxx>
branch nick: trunk
timestamp: Tue 2010-02-09 21:24:14 -0600
message:
Better handle errors on dbus and fix one function signature.
modified:
libdbusmenu-glib/client.c
libdbusmenu-glib/server-marshal.list
libdbusmenu-glib/server.c
--
lp:dbusmenu
https://code.launchpad.net/~dbusmenu-team/dbusmenu/trunk
Your team ayatana-commits is subscribed to branch lp:dbusmenu.
To unsubscribe from this branch go to https://code.launchpad.net/~dbusmenu-team/dbusmenu/trunk/+edit-subscription.
=== modified file 'libdbusmenu-glib/client.c'
--- libdbusmenu-glib/client.c 2010-02-08 22:02:12 +0000
+++ libdbusmenu-glib/client.c 2010-02-09 17:13:51 +0000
@@ -96,7 +96,7 @@
static void set_property (GObject * obj, guint id, const GValue * value, GParamSpec * pspec);
static void get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec);
/* Private Funcs */
-static void layout_update (DBusGProxy * proxy, gint revision, guint parent, DbusmenuClient * client);
+static void layout_update (DBusGProxy * proxy, guint revision, gint parent, DbusmenuClient * client);
static void id_prop_update (DBusGProxy * proxy, gint id, gchar * property, GValue * value, DbusmenuClient * client);
static void id_update (DBusGProxy * proxy, gint id, DbusmenuClient * client);
static void build_proxies (DbusmenuClient * client);
@@ -309,7 +309,7 @@
/* Annoying little wrapper to make the right function update */
static void
-layout_update (DBusGProxy * proxy, gint revision, guint parent, DbusmenuClient * client)
+layout_update (DBusGProxy * proxy, guint revision, gint parent, DbusmenuClient * client)
{
DbusmenuClientPrivate * priv = DBUSMENU_CLIENT_GET_PRIVATE(client);
priv->current_revision = revision;
@@ -504,8 +504,8 @@
dbus_g_proxy_add_signal(priv->menuproxy, "LayoutUpdated", G_TYPE_UINT, G_TYPE_INT, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(priv->menuproxy, "LayoutUpdated", G_CALLBACK(layout_update), client, NULL);
- dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__UINT_STRING_POINTER, G_TYPE_NONE, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
- dbus_g_proxy_add_signal(priv->menuproxy, "ItemPropertyUpdated", G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
+ dbus_g_object_register_marshaller(_dbusmenu_server_marshal_VOID__INT_STRING_POINTER, G_TYPE_NONE, G_TYPE_INT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal(priv->menuproxy, "ItemPropertyUpdated", G_TYPE_INT, G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(priv->menuproxy, "ItemPropertyUpdated", G_CALLBACK(id_prop_update), client, NULL);
dbus_g_proxy_add_signal(priv->menuproxy, "ItemUpdated", G_TYPE_INT, G_TYPE_INVALID);
@@ -561,6 +561,7 @@
static void
menuitem_get_properties_cb (DBusGProxy * proxy, GHashTable * properties, GError * error, gpointer data)
{
+ g_return_if_fail(DBUSMENU_IS_MENUITEM(data));
if (error != NULL) {
g_warning("Error getting properties on a menuitem: %s", error->message);
return;
@@ -570,19 +571,33 @@
return;
}
+/* This function is called to refresh the properites on an item that
+ is getting recycled with the update, but we think might have prop
+ changes. */
static void
menuitem_get_properties_replace_cb (DBusGProxy * proxy, GHashTable * properties, GError * error, gpointer data)
{
+ g_return_if_fail(DBUSMENU_IS_MENUITEM(data));
+ gboolean have_error = FALSE;
+
+ if (error != NULL) {
+ g_warning("Unable to replace properties on %d: %s", dbusmenu_menuitem_get_id(DBUSMENU_MENUITEM(data)), error->message);
+ have_error = TRUE;
+ }
+
GList * current_props = NULL;
for (current_props = dbusmenu_menuitem_properties_list(DBUSMENU_MENUITEM(data));
current_props != NULL ; current_props = g_list_next(current_props)) {
- if (g_hash_table_lookup(properties, current_props->data) == NULL) {
+ if (have_error || g_hash_table_lookup(properties, current_props->data) == NULL) {
dbusmenu_menuitem_property_remove(DBUSMENU_MENUITEM(data), (const gchar *)current_props->data);
}
}
- menuitem_get_properties_cb(proxy, properties, error, data);
+ if (!have_error) {
+ menuitem_get_properties_cb(proxy, properties, error, data);
+ }
+
return;
}
@@ -632,13 +647,13 @@
return;
}
+/* Respond to the call function to make sure that the other side
+ got it, or print a warning. */
static void
menuitem_call_cb (DBusGProxy * proxy, GError * error, gpointer userdata)
{
- DbusmenuMenuitem * mi = (DbusmenuMenuitem *)userdata;
-
if (error != NULL) {
- g_warning("Unable to call menu item %d: %s", dbusmenu_menuitem_get_id(mi), error->message);
+ g_warning("Unable to call menu item %d: %s", GPOINTER_TO_INT(userdata), error->message);
}
return;
=== modified file 'libdbusmenu-glib/server-marshal.list'
--- libdbusmenu-glib/server-marshal.list 2010-02-03 18:33:58 +0000
+++ libdbusmenu-glib/server-marshal.list 2010-02-09 16:52:21 +0000
@@ -1,2 +1,2 @@
-VOID: UINT, STRING, POINTER
+VOID: INT, STRING, POINTER
VOID: UINT, INT
=== modified file 'libdbusmenu-glib/server.c'
--- libdbusmenu-glib/server.c 2010-02-05 05:17:32 +0000
+++ libdbusmenu-glib/server.c 2010-02-09 16:52:21 +0000
@@ -129,8 +129,8 @@
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET(DbusmenuServerClass, id_prop_update),
NULL, NULL,
- _dbusmenu_server_marshal_VOID__UINT_STRING_POINTER,
- G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_VALUE);
+ _dbusmenu_server_marshal_VOID__INT_STRING_POINTER,
+ G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_STRING, G_TYPE_VALUE);
/**
DbusmenuServer::id-update:
@arg0: The #DbusmenuServer emitting the signal.