13781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/* GIO - GLib Input, Output and Streaming Library 23781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * 33781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Copyright (C) 2006-2007 Red Hat, Inc. 43781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * 53781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This library is free software; you can redistribute it and/or 63781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * modify it under the terms of the GNU Lesser General Public 73781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * License as published by the Free Software Foundation; either 83781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * version 2 of the License, or (at your option) any later version. 93781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * 103781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This library is distributed in the hope that it will be useful, 113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * but WITHOUT ANY WARRANTY; without even the implied warranty of 123781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 133781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Lesser General Public License for more details. 143781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * 153781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * You should have received a copy of the GNU Lesser General 163781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Public License along with this library; if not, write to the 173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Free Software Foundation, Inc., 59 Temple Place, Suite 330, 183781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Boston, MA 02111-1307, USA. 193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * 203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Author: Alexander Larsson <alexl@redhat.com> 213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson */ 223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 23761424465aaad736916b029383483b6ac419d831Johan Dahlin#include "config.h" 243d93bf6968884d75dd2706ef85e2014305eb92f2Cody Russell#include "gasyncresult.h" 253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include "gsimpleasyncresult.h" 263d93bf6968884d75dd2706ef85e2014305eb92f2Cody Russell#include "gicon.h" 273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include "gloadableicon.h" 283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#include "glibintl.h" 293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 307f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#include "gioalias.h" 317f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson 325247f12f3649726471080440de0d37b78c1cec33Andrew Walton/** 335247f12f3649726471080440de0d37b78c1cec33Andrew Walton * SECTION:gloadableicon 345247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @short_description: Loadable Icons 35f3144c7efe8c84f7a00bff9b796d5e73efc151cfMatthias Clasen * @include: gio/gio.h 365247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @see_also: #GIcon, #GThemedIcon 375247f12f3649726471080440de0d37b78c1cec33Andrew Walton * 380debd52858ffb4f468e55cd2f3c7e4dec5455b94Matthias Clasen * Extends the #GIcon interface and adds the ability to 390debd52858ffb4f468e55cd2f3c7e4dec5455b94Matthias Clasen * load icons from streams. 405247f12f3649726471080440de0d37b78c1cec33Andrew Walton **/ 415247f12f3649726471080440de0d37b78c1cec33Andrew Walton 423781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void g_loadable_icon_real_load_async (GLoadableIcon *icon, 433781343738de4abddf56982325a77bd70a98cd26Alexander Larsson int size, 443781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GCancellable *cancellable, 453781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GAsyncReadyCallback callback, 463781343738de4abddf56982325a77bd70a98cd26Alexander Larsson gpointer user_data); 473781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic GInputStream *g_loadable_icon_real_load_finish (GLoadableIcon *icon, 483781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GAsyncResult *res, 493781343738de4abddf56982325a77bd70a98cd26Alexander Larsson char **type, 503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GError **error); 513781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void g_loadable_icon_base_init (gpointer g_class); 523781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void g_loadable_icon_class_init (gpointer g_class, 533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson gpointer class_data); 543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 553781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGType 563781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_get_type (void) 573781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 58acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen static volatile gsize g_define_type_id__volatile = 0; 593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 60acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen if (g_once_init_enter (&g_define_type_id__volatile)) 613781343738de4abddf56982325a77bd70a98cd26Alexander Larsson { 62acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen const GTypeInfo loadable_icon_info = 633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson { 643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson sizeof (GLoadableIconIface), /* class_size */ 653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_loadable_icon_base_init, /* base_init */ 663781343738de4abddf56982325a77bd70a98cd26Alexander Larsson NULL, /* base_finalize */ 673781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_loadable_icon_class_init, 683781343738de4abddf56982325a77bd70a98cd26Alexander Larsson NULL, /* class_finalize */ 693781343738de4abddf56982325a77bd70a98cd26Alexander Larsson NULL, /* class_data */ 703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 0, 713781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 0, /* n_preallocs */ 723781343738de4abddf56982325a77bd70a98cd26Alexander Larsson NULL 733781343738de4abddf56982325a77bd70a98cd26Alexander Larsson }; 74acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen GType g_define_type_id = 753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_type_register_static (G_TYPE_INTERFACE, I_("GLoadableIcon"), 763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson &loadable_icon_info, 0); 773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 78acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_ICON); 79acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen 80acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); 813781343738de4abddf56982325a77bd70a98cd26Alexander Larsson } 823781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 83acb7f6449a8c553e4e4564cc24ed9916168b7e5fMatthias Clasen return g_define_type_id__volatile; 843781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 853781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 863781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void 873781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_class_init (gpointer g_class, 883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson gpointer class_data) 893781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 903781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GLoadableIconIface *iface = g_class; 913781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 923781343738de4abddf56982325a77bd70a98cd26Alexander Larsson iface->load_async = g_loadable_icon_real_load_async; 933781343738de4abddf56982325a77bd70a98cd26Alexander Larsson iface->load_finish = g_loadable_icon_real_load_finish; 943781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 953781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 963781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void 973781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_base_init (gpointer g_class) 983781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 993781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 1003781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1013781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/** 1023781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_loadable_icon_load: 1035247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @icon: a #GLoadableIcon. 1045247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @size: an integer. 105ab69ee2945af25672ad4bb48ae6ab5b87f0e06e2A. Walton * @type: a location to store the type of the loaded icon, %NULL to ignore. 1063781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @cancellable: optional #GCancellable object, %NULL to ignore. 1073781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @error: a #GError location to store the error occuring, or %NULL to 1083781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * ignore. 1095247f12f3649726471080440de0d37b78c1cec33Andrew Walton * 1105247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Loads a loadable icon. For the asynchronous version of this function, 1115247f12f3649726471080440de0d37b78c1cec33Andrew Walton * see g_loadable_icon_load_async(). 1125247f12f3649726471080440de0d37b78c1cec33Andrew Walton * 1135247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GInputStream to read the icon from. 1143781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/ 1153781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGInputStream * 11609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_load (GLoadableIcon *icon, 11709471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen int size, 11809471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen char **type, 11909471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GCancellable *cancellable, 12009471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GError **error) 1213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 1223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GLoadableIconIface *iface; 1233781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1243781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL); 1253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1263781343738de4abddf56982325a77bd70a98cd26Alexander Larsson iface = G_LOADABLE_ICON_GET_IFACE (icon); 1273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson return (* iface->load) (icon, size, type, cancellable, error); 1293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 1303781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/** 1323781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_loadable_icon_load_async: 1335247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @icon: a #GLoadableIcon. 1345247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @size: an integer. 1355247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @cancellable: optional #GCancellable object, %NULL to ignore. 1365247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @callback: a #GAsyncReadyCallback to call when the request is satisfied 1375247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @user_data: the data to pass to callback function 1383781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * 1395247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Loads an icon asynchronously. To finish this function, see 1405247f12f3649726471080440de0d37b78c1cec33Andrew Walton * g_loadable_icon_load_finish(). For the synchronous, blocking 1415247f12f3649726471080440de0d37b78c1cec33Andrew Walton * version of this function, see g_loadable_icon_load(). 1423781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/ 1433781343738de4abddf56982325a77bd70a98cd26Alexander Larssonvoid 14409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_load_async (GLoadableIcon *icon, 14509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen int size, 14609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GCancellable *cancellable, 14709471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GAsyncReadyCallback callback, 14809471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen gpointer user_data) 1493781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 1503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GLoadableIconIface *iface; 1513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_return_if_fail (G_IS_LOADABLE_ICON (icon)); 1533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson iface = G_LOADABLE_ICON_GET_IFACE (icon); 1553781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1563781343738de4abddf56982325a77bd70a98cd26Alexander Larsson (* iface->load_async) (icon, size, cancellable, callback, user_data); 1573781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 1583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/** 1603781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_loadable_icon_load_finish: 1615247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @icon: a #GLoadableIcon. 1625247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @res: a #GAsyncResult. 163ab69ee2945af25672ad4bb48ae6ab5b87f0e06e2A. Walton * @type: a location to store the type of the loaded icon, %NULL to ignore. 1643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @error: a #GError location to store the error occuring, or %NULL to 1653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * ignore. 1665247f12f3649726471080440de0d37b78c1cec33Andrew Walton * 1675247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Finishes an asynchronous icon load started in g_loadable_icon_load_async(). 1685247f12f3649726471080440de0d37b78c1cec33Andrew Walton * 1695247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GInputStream to read the icon from. 1703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/ 1713781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGInputStream * 17209471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_load_finish (GLoadableIcon *icon, 17309471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GAsyncResult *res, 17409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen char **type, 17509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GError **error) 1763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 1773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GLoadableIconIface *iface; 1783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1793781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL); 1803781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL); 1813781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1823781343738de4abddf56982325a77bd70a98cd26Alexander Larsson if (G_IS_SIMPLE_ASYNC_RESULT (res)) 1833781343738de4abddf56982325a77bd70a98cd26Alexander Larsson { 1843781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res); 1853781343738de4abddf56982325a77bd70a98cd26Alexander Larsson if (g_simple_async_result_propagate_error (simple, error)) 1863781343738de4abddf56982325a77bd70a98cd26Alexander Larsson return NULL; 1873781343738de4abddf56982325a77bd70a98cd26Alexander Larsson } 1883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1893781343738de4abddf56982325a77bd70a98cd26Alexander Larsson iface = G_LOADABLE_ICON_GET_IFACE (icon); 1903781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1913781343738de4abddf56982325a77bd70a98cd26Alexander Larsson return (* iface->load_finish) (icon, res, type, error); 1923781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 1933781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1943781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/******************************************** 1953781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Default implementation of async load * 1963781343738de4abddf56982325a77bd70a98cd26Alexander Larsson ********************************************/ 1973781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 1983781343738de4abddf56982325a77bd70a98cd26Alexander Larssontypedef struct { 1993781343738de4abddf56982325a77bd70a98cd26Alexander Larsson int size; 2003781343738de4abddf56982325a77bd70a98cd26Alexander Larsson char *type; 2013781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GInputStream *stream; 2023781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} LoadData; 2033781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2043781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void 2053781343738de4abddf56982325a77bd70a98cd26Alexander Larssonload_data_free (LoadData *data) 2063781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 2073781343738de4abddf56982325a77bd70a98cd26Alexander Larsson if (data->stream) 2083781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_object_unref (data->stream); 2093781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_free (data->type); 2103781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_free (data); 2113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 2123781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2133781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void 2143781343738de4abddf56982325a77bd70a98cd26Alexander Larssonload_async_thread (GSimpleAsyncResult *res, 21509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GObject *object, 21609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GCancellable *cancellable) 2173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 2183781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GLoadableIconIface *iface; 2193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GInputStream *stream; 2203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson LoadData *data; 2213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GError *error = NULL; 2223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson char *type = NULL; 2233781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2243781343738de4abddf56982325a77bd70a98cd26Alexander Larsson data = g_simple_async_result_get_op_res_gpointer (res); 2253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2263781343738de4abddf56982325a77bd70a98cd26Alexander Larsson iface = G_LOADABLE_ICON_GET_IFACE (object); 2273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson stream = iface->load (G_LOADABLE_ICON (object), data->size, &type, cancellable, &error); 2283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson if (stream == NULL) 2303781343738de4abddf56982325a77bd70a98cd26Alexander Larsson { 2313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_simple_async_result_set_from_error (res, error); 2323781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_error_free (error); 2333781343738de4abddf56982325a77bd70a98cd26Alexander Larsson } 2343781343738de4abddf56982325a77bd70a98cd26Alexander Larsson else 2353781343738de4abddf56982325a77bd70a98cd26Alexander Larsson { 2363781343738de4abddf56982325a77bd70a98cd26Alexander Larsson data->stream = stream; 2373781343738de4abddf56982325a77bd70a98cd26Alexander Larsson data->type = type; 2383781343738de4abddf56982325a77bd70a98cd26Alexander Larsson } 2393781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 2403781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2413781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2423781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2433781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void 24409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_real_load_async (GLoadableIcon *icon, 24509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen int size, 24609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GCancellable *cancellable, 24709471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen GAsyncReadyCallback callback, 24809471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen gpointer user_data) 2493781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 2503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GSimpleAsyncResult *res; 2513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson LoadData *data; 2523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson res = g_simple_async_result_new (G_OBJECT (icon), callback, user_data, g_loadable_icon_real_load_async); 2543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson data = g_new0 (LoadData, 1); 2553781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify) load_data_free); 2563781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_simple_async_result_run_in_thread (res, load_async_thread, 0, cancellable); 2573781343738de4abddf56982325a77bd70a98cd26Alexander Larsson g_object_unref (res); 2583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 2593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2603781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic GInputStream * 2613781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_real_load_finish (GLoadableIcon *icon, 2623781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GAsyncResult *res, 2633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson char **type, 2643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GError **error) 2653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{ 2663781343738de4abddf56982325a77bd70a98cd26Alexander Larsson GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res); 2673781343738de4abddf56982325a77bd70a98cd26Alexander Larsson LoadData *data; 2683781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 269cc3de68e2151cf3341115212c56c17714ca03bb2g_simple_async_result_get_source_tag (simple) == g_loadable_icon_real_load_async); g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_loadable_icon_real_load_async); 2703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2713781343738de4abddf56982325a77bd70a98cd26Alexander Larsson data = g_simple_async_result_get_op_res_gpointer (simple); 2723781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2733781343738de4abddf56982325a77bd70a98cd26Alexander Larsson if (type) 2743781343738de4abddf56982325a77bd70a98cd26Alexander Larsson { 2753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *type = data->type; 2763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson data->type = NULL; 2773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson } 2783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson 2793781343738de4abddf56982325a77bd70a98cd26Alexander Larsson return g_object_ref (data->stream); 2803781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} 2817f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson 2827f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#define __G_LOADABLE_ICON_C__ 2837f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#include "gioaliasdef.c" 284