aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-glib
diff options
context:
space:
mode:
Diffstat (limited to 'libdbusmenu-glib')
-rw-r--r--libdbusmenu-glib/client.c19
-rw-r--r--libdbusmenu-glib/server.c9
2 files changed, 21 insertions, 7 deletions
diff --git a/libdbusmenu-glib/client.c b/libdbusmenu-glib/client.c
index 34f8b8d..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;
@@ -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;
}
@@ -2028,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,
@@ -2041,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);
}
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c
index 091b243..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;
}
@@ -1831,12 +1832,13 @@ 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;
- 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));
@@ -1872,6 +1874,7 @@ bus_about_to_show_group (DbusmenuServer * server, GVariant * params, GDBusMethod
}
g_variant_unref(errors);
+ g_variant_unref(items);
return;
}