static void load_async_thread (GSimpleAsyncResult *res, GObject *object, GCancellable *cancellable) { GLoadableIconIface *iface; GInputStream *stream; LoadData *data; GError *error = NULL; char *type = NULL; data = g_simple_async_result_get_op_res_gpointer (res); iface = G_LOADABLE_ICON_GET_IFACE (object); stream = iface->load (G_LOADABLE_ICON (object), data->size, &type, cancellable, &error); if (stream == NULL) { g_simple_async_result_take_error (res, error); } else { data->stream = stream; data->type = type; } }
/** * g_loadable_icon_load: * @icon: a #GLoadableIcon. * @size: an integer. * @type: (out) (allow-none): a location to store the type of the * loaded icon, %NULL to ignore. * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore. * @error: a #GError location to store the error occurring, or %NULL to * ignore. * * Loads a loadable icon. For the asynchronous version of this function, * see g_loadable_icon_load_async(). * * Returns: (transfer full): a #GInputStream to read the icon from. **/ GInputStream * g_loadable_icon_load (GLoadableIcon *icon, int size, char **type, GCancellable *cancellable, GError **error) { GLoadableIconIface *iface; g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL); iface = G_LOADABLE_ICON_GET_IFACE (icon); return (* iface->load) (icon, size, type, cancellable, error); }
/** * g_loadable_icon_load_async: * @icon: a #GLoadableIcon. * @size: an integer. * @cancellable: (allow-none): optional #GCancellable object, %NULL to ignore. * @callback: (scope async): a #GAsyncReadyCallback to call when the * request is satisfied * @user_data: (closure): the data to pass to callback function * * Loads an icon asynchronously. To finish this function, see * g_loadable_icon_load_finish(). For the synchronous, blocking * version of this function, see g_loadable_icon_load(). **/ void g_loadable_icon_load_async (GLoadableIcon *icon, int size, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GLoadableIconIface *iface; g_return_if_fail (G_IS_LOADABLE_ICON (icon)); iface = G_LOADABLE_ICON_GET_IFACE (icon); (* iface->load_async) (icon, size, cancellable, callback, user_data); }
/** * g_loadable_icon_load_finish: * @icon: a #GLoadableIcon. * @res: a #GAsyncResult. * @type: a location to store the type of the loaded icon, %NULL to ignore. * @error: a #GError location to store the error occurring, or %NULL to * ignore. * * Finishes an asynchronous icon load started in g_loadable_icon_load_async(). * * Returns: (transfer full): a #GInputStream to read the icon from. **/ GInputStream * g_loadable_icon_load_finish (GLoadableIcon *icon, GAsyncResult *res, char **type, GError **error) { GLoadableIconIface *iface; g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL); g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL); if (g_async_result_legacy_propagate_error (res, error)) return NULL; iface = G_LOADABLE_ICON_GET_IFACE (icon); return (* iface->load_finish) (icon, res, type, error); }
static void load_async_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { GLoadableIcon *icon = source_object; LoadData *data = task_data; GLoadableIconIface *iface; GInputStream *stream; GError *error = NULL; iface = G_LOADABLE_ICON_GET_IFACE (icon); stream = iface->load (icon, data->size, &data->type, cancellable, &error); if (stream) g_task_return_pointer (task, stream, g_object_unref); else g_task_return_error (task, error); }