static GDBusInterfaceInfo * org_gtk_Menus_get_interface (void) { static GDBusInterfaceInfo *interface_info; if (interface_info == NULL) { GError *error = NULL; GDBusNodeInfo *info; info = g_dbus_node_info_new_for_xml ("<node>" " <interface name='org.gtk.Menus'>" " <method name='Start'>" " <arg type='au' name='groups' direction='in'/>" " <arg type='a(uuaa{sv})' name='content' direction='out'/>" " </method>" " <method name='End'>" " <arg type='au' name='groups' direction='in'/>" " </method>" " <signal name='Changed'>" " arg type='a(uuuuaa{sv})' name='changes'/>" " </signal>" " </interface>" "</node>", &error); if (info == NULL) g_error ("%s\n", error->message); interface_info = g_dbus_node_info_lookup_interface (info, "org.gtk.Menus"); g_assert (interface_info != NULL); g_dbus_interface_info_ref (interface_info); g_dbus_node_info_unref (info); } return interface_info; }
static void daemon_maybe_add_extension_interface (GHashTable *ifaces, GDBusInterfaceInfo *iface) { gint i; /* We visit the XDG data dirs in precedence order, so if we * already have this one, we should not add it again. */ if (g_hash_table_contains (ifaces, iface->name)) return; /* Only accept interfaces with only properties */ if ((iface->methods && iface->methods[0]) || (iface->signals && iface->signals[0])) return; /* Add it only if we can find the annotation */ for (i = 0; iface->annotations && iface->annotations[i]; i++) { if (g_str_equal (iface->annotations[i]->key, "org.freedesktop.Accounts.VendorExtension")) { g_hash_table_insert (ifaces, g_strdup (iface->name), g_dbus_interface_info_ref (iface)); return; } } }
guint evd_dbus_agent_register_object (GObject *object, guint connection_id, const gchar *object_path, GDBusInterfaceInfo *interface_info, GError **error) { GDBusConnection *dbus_conn; guint reg_id = 0; g_return_val_if_fail (G_IS_OBJECT (object), 0); g_return_val_if_fail (connection_id > 0, 0); g_return_val_if_fail (object_path != NULL, 0); g_return_val_if_fail (interface_info != NULL, 0); if ( (dbus_conn = evd_dbus_agent_get_connection (object, connection_id, error)) == NULL) { return 0; } reg_id = g_dbus_connection_register_object (dbus_conn, object_path, interface_info, &evd_dbus_agent_iface_vtable, object, NULL, error); if (reg_id > 0) { gchar *key; ObjectData *data; RegObjData *reg_obj_data; data = evd_dbus_agent_get_object_data (object); g_assert (data != NULL); key = g_strdup_printf ("%p-%s<%s>", dbus_conn, object_path, interface_info->name); reg_obj_data = g_slice_new (RegObjData); reg_obj_data->obj_path = g_strdup (object_path); reg_obj_data->dbus_conn = dbus_conn; g_object_ref (dbus_conn); reg_obj_data->reg_id = reg_id; reg_obj_data->serial = 0; reg_obj_data->reg_str_id = key; reg_obj_data->obj_data = data; reg_obj_data->conn_id = connection_id; reg_obj_data->iface_info = g_dbus_interface_info_ref (interface_info); reg_obj_data->invocations = g_hash_table_new_full (g_int64_hash, g_int64_equal, NULL, NULL); g_hash_table_insert (data->reg_objs, key, reg_obj_data); g_hash_table_insert (data->reg_objs_by_id, ®_obj_data->reg_id, reg_obj_data); } return reg_id; }