static void ibus_factory_destroy (IBusFactory *factory) { GList *list; IBusFactoryPrivate *priv; priv = IBUS_FACTORY_GET_PRIVATE (factory); list = g_list_copy (priv->engine_list); g_list_foreach (list, (GFunc) ibus_object_destroy, NULL); g_list_free (priv->engine_list); g_list_free (list); priv->engine_list = NULL; if (priv->engine_table) { g_hash_table_destroy (priv->engine_table); } if (priv->connection) { ibus_service_remove_from_connection ((IBusService *)factory, priv->connection); g_object_unref (priv->connection); } IBUS_OBJECT_CLASS(factory_parent_class)->destroy (IBUS_OBJECT (factory)); }
static void _connection_destroy_cb (IBusConnection *connection, IBusService *service) { g_assert (IBUS_IS_CONNECTION (connection)); g_assert (IBUS_IS_SERVICE (service)); ibus_service_remove_from_connection (service, connection); }