From 410b3e76f0c5fe382456e7347d13340a927065bf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 10:34:33 -0600 Subject: Better error handling. If we can't get the properties, remove all of them. --- libdbusmenu-glib/client.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-glib/client.c') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 5d7b5b1..c2b9c1f 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -570,19 +570,33 @@ menuitem_get_properties_cb (DBusGProxy * proxy, GHashTable * properties, GError 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; } -- cgit v1.2.3 From ad37b8d3493851011e585f0e342eef49f973f3b9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 10:52:21 -0600 Subject: Changing prototype of property update call to match spec. --- libdbusmenu-glib/client.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'libdbusmenu-glib/client.c') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index c2b9c1f..efae0ee 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -96,7 +96,7 @@ static void dbusmenu_client_finalize (GObject *object); 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 @@ get_property (GObject * obj, guint id, GValue * value, GParamSpec * pspec) /* 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 @@ build_proxies (DbusmenuClient * client) 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); -- cgit v1.2.3 From a8a90555de087915762224eaab219874b1e161d6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 10:57:49 -0600 Subject: Adding some additional checks. --- libdbusmenu-glib/client.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib/client.c') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index efae0ee..40ab182 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -561,6 +561,7 @@ get_properties_helper (gpointer key, gpointer value, gpointer data) 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; @@ -646,10 +647,13 @@ menuitem_get_properties_new_cb (DBusGProxy * proxy, GHashTable * properties, GEr 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; + g_return_if_fail(DBUSMENU_IS_MENUITEM(userdata)); + DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(userdata); if (error != NULL) { g_warning("Unable to call menu item %d: %s", dbusmenu_menuitem_get_id(mi), error->message); -- cgit v1.2.3 From 4d8236d9d8800296a3dca2a9062f97528d0b65ef Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Tue, 9 Feb 2010 11:13:51 -0600 Subject: Switching from an object to an ID, which is what's passed. --- libdbusmenu-glib/client.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'libdbusmenu-glib/client.c') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 40ab182..071654e 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -652,11 +652,8 @@ menuitem_get_properties_new_cb (DBusGProxy * proxy, GHashTable * properties, GEr static void menuitem_call_cb (DBusGProxy * proxy, GError * error, gpointer userdata) { - g_return_if_fail(DBUSMENU_IS_MENUITEM(userdata)); - DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(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; -- cgit v1.2.3