From 042406a84a19568ab4e417e51eac9a632970c25e Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 4 Apr 2012 23:06:45 -0500 Subject: Protect from the cases where we might get NULL in the data segment --- libdbusmenu-glib/client.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 34f8b8d..78537f8 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -1834,6 +1834,8 @@ struct _about_to_show_t { static void about_to_show_finish (about_to_show_t * data, gboolean need_update) { + g_return_if_fail(data != NULL); + /* If we need to update, do that first. */ if (need_update) { update_layout(data->client); @@ -1938,6 +1940,8 @@ about_to_show_idle (gpointer user_data) GQueue * showers = priv->about_to_show_to_go; priv->about_to_show_to_go = NULL; + g_return_val_if_fail(showers != NULL, FALSE); + /* Figure out if we've got any callbacks */ gboolean got_callbacks = FALSE; g_queue_foreach(showers, about_to_show_idle_callbacks, &got_callbacks); @@ -1995,7 +1999,10 @@ about_to_show_cb (GObject * proxy, GAsyncResult * res, gpointer userdata) g_variant_unref(params); } - about_to_show_finish(data, need_update); + if (data != NULL) { + about_to_show_finish(data, need_update); + } + return; } -- cgit v1.2.3 From 9e5453bb93db68695d5fd4c1e8de8003a400f7d6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 4 Apr 2012 23:07:16 -0500 Subject: Make sure that if the callback is NULL we're not trying to get a callback --- libdbusmenu-glib/client.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'libdbusmenu-glib') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index 78537f8..ed89d86 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -2035,11 +2035,15 @@ dbusmenu_client_send_about_to_show(DbusmenuClient * client, gint id, void (*cb)( priv->about_to_show_idle = g_idle_add(about_to_show_idle, client); } } else { + GAsyncReadyCallback dbuscb = NULL; + /* If there's no callback we don't need this data, let's clean it up in a consistent way */ if (cb == NULL) { about_to_show_finish(data, FALSE); data = NULL; + } else { + dbuscb = about_to_show_cb; } g_dbus_proxy_call(priv->menuproxy, @@ -2048,7 +2052,7 @@ dbusmenu_client_send_about_to_show(DbusmenuClient * client, gint id, void (*cb)( G_DBUS_CALL_FLAGS_NONE, -1, /* timeout */ NULL, /* cancellable */ - about_to_show_cb, + dbuscb, data); } -- cgit v1.2.3 From d3a9dcd2d4afb609c0201573fb8463242d0e9aba Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 5 Apr 2012 13:35:49 -0500 Subject: make event_data_find() and session_bus_cb() private instead of public --- libdbusmenu-glib/client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-glib') diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c index ed89d86..b6e7204 100644 --- a/libdbusmenu-glib/client.c +++ b/libdbusmenu-glib/client.c @@ -1023,7 +1023,7 @@ proxy_destroyed (GObject * gobj_proxy, gpointer userdata) /* Respond to us getting the session bus (hopefully) or handle the error if not */ -void +static void session_bus_cb (GObject * object, GAsyncResult * res, gpointer user_data) { GError * error = NULL; @@ -1634,7 +1634,7 @@ menuitem_call_cb (GObject * proxy, GAsyncResult * res, gpointer userdata) } /* Looks at event_data_t structs to match an ID */ -gint +static gint event_data_find (gconstpointer data, gconstpointer user_data) { event_data_t * edata = (event_data_t *)data; -- cgit v1.2.3 From 29097ccb25899f33f62a65a85ffdbd9250945e00 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 9 Apr 2012 10:08:06 -0500 Subject: Pull the items out of the tuple --- libdbusmenu-glib/server.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libdbusmenu-glib') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 091b243..9e5b714 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -1831,8 +1831,9 @@ bus_about_to_show_group (DbusmenuServer * server, GVariant * params, GDBusMethod gint32 id; GVariantIter iter; GVariantBuilder builder; - - g_variant_iter_init(&iter, params); + + GVariant * items = g_variant_get_child_value(params, 0); + g_variant_iter_init(&iter, items); g_variant_builder_init(&builder, G_VARIANT_TYPE("ai")); gboolean gotone = FALSE; @@ -1872,6 +1873,7 @@ bus_about_to_show_group (DbusmenuServer * server, GVariant * params, GDBusMethod } g_variant_unref(errors); + g_variant_unref(items); return; } -- cgit v1.2.3 From fcbbfff1269c3a923358c31587319239d183508a Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 9 Apr 2012 10:09:41 -0500 Subject: Apparently this type is wrong, if only this language supported some way to communicate to programmers the types that variables were. Oh, we can dream. --- libdbusmenu-glib/server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libdbusmenu-glib') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 9e5b714..ebe0082 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -1837,7 +1837,7 @@ bus_about_to_show_group (DbusmenuServer * server, GVariant * params, GDBusMethod g_variant_builder_init(&builder, G_VARIANT_TYPE("ai")); gboolean gotone = FALSE; - while (g_variant_iter_loop(&iter, "(i)", &id)) { + while (g_variant_iter_loop(&iter, "i", &id)) { DbusmenuMenuitem * mi = lookup_menuitem_by_id(server, id); if (mi != NULL) { g_timeout_add(0, bus_about_to_show_idle, g_object_ref(mi)); -- cgit v1.2.3 From 514253caa8b99331f11bf91b15fffe0fe44f5e0c Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 10 Apr 2012 17:54:52 -0500 Subject: In menuitem_signals_remove(), disconnect the DBUSMENU_MENUITEM_SIGNAL_SHOW_TO_USER event that we connected to in menuitem_signals_create(). It looks like this non-disconnected signal goes all the way back to July 2010 so I'd like ted's eyes on this to confirm there's not some nuance that I'm missing... --- libdbusmenu-glib/server.c | 1 + 1 file changed, 1 insertion(+) (limited to 'libdbusmenu-glib') diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index ebe0082..9e5ef0c 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -1288,6 +1288,7 @@ menuitem_signals_remove (DbusmenuMenuitem * mi, gpointer data) g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_child_removed), data); g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_child_moved), data); g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_property_changed), data); + g_signal_handlers_disconnect_by_func(G_OBJECT(mi), G_CALLBACK(menuitem_shown), data); return; } -- cgit v1.2.3