gloadableicon.c revision 3d93bf6968884d75dd2706ef85e2014305eb92f2
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{
583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  static GType loadable_icon_type = 0;
593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
603781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  if (! loadable_icon_type)
613781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    {
623781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      static 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      };
743781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      loadable_icon_type =
763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson	g_type_register_static (G_TYPE_INTERFACE, I_("GLoadableIcon"),
773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				&loadable_icon_info, 0);
783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
793781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      g_type_interface_add_prerequisite (loadable_icon_type, G_TYPE_ICON);
803781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    }
813781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
823781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return loadable_icon_type;
833781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
843781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
853781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
863781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_class_init (gpointer g_class,
873781343738de4abddf56982325a77bd70a98cd26Alexander Larsson			    gpointer class_data)
883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
893781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GLoadableIconIface *iface = g_class;
903781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
913781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  iface->load_async = g_loadable_icon_real_load_async;
923781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  iface->load_finish = g_loadable_icon_real_load_finish;
933781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
943781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
953781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
963781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_base_init (gpointer g_class)
973781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
983781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
993781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1003781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
1013781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_loadable_icon_load:
1025247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @icon: a #GLoadableIcon.
1035247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @size: an integer.
104ab69ee2945af25672ad4bb48ae6ab5b87f0e06e2A. Walton * @type:  a location to store the type of the loaded icon, %NULL to ignore.
1053781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @cancellable: optional #GCancellable object, %NULL to ignore.
1063781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @error: a #GError location to store the error occuring, or %NULL to
1073781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * ignore.
1085247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
1095247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Loads a loadable icon. For the asynchronous version of this function,
1105247f12f3649726471080440de0d37b78c1cec33Andrew Walton * see g_loadable_icon_load_async().
1115247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
1125247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GInputStream to read the icon from.
1133781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
1143781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGInputStream *
11509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_load (GLoadableIcon  *icon,
11609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen		      int             size,
11709471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen		      char          **type,
11809471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen		      GCancellable   *cancellable,
11909471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen		      GError        **error)
1203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GLoadableIconIface *iface;
1223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1233781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL);
1243781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  iface = G_LOADABLE_ICON_GET_IFACE (icon);
1263781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* iface->load) (icon, size, type, cancellable, error);
1283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
1293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1303781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
1313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_loadable_icon_load_async:
1325247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @icon: a #GLoadableIcon.
1335247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @size: an integer.
1345247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @cancellable: optional #GCancellable object, %NULL to ignore.
1355247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @callback: a #GAsyncReadyCallback to call when the request is satisfied
1365247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @user_data: the data to pass to callback function
1373781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
1385247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Loads an icon asynchronously. To finish this function, see
1395247f12f3649726471080440de0d37b78c1cec33Andrew Walton * g_loadable_icon_load_finish(). For the synchronous, blocking
1405247f12f3649726471080440de0d37b78c1cec33Andrew Walton * version of this function, see g_loadable_icon_load().
1413781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
1423781343738de4abddf56982325a77bd70a98cd26Alexander Larssonvoid
14309471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_load_async (GLoadableIcon       *icon,
14409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen                            int                  size,
14509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen                            GCancellable        *cancellable,
14609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen                            GAsyncReadyCallback  callback,
14709471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen                            gpointer             user_data)
1483781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1493781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GLoadableIconIface *iface;
1503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_if_fail (G_IS_LOADABLE_ICON (icon));
1523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  iface = G_LOADABLE_ICON_GET_IFACE (icon);
1543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1553781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  (* iface->load_async) (icon, size, cancellable, callback, user_data);
1563781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
1573781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/**
1593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * g_loadable_icon_load_finish:
1605247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @icon: a #GLoadableIcon.
1615247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @res: a #GAsyncResult.
162ab69ee2945af25672ad4bb48ae6ab5b87f0e06e2A. Walton * @type: a location to store the type of the loaded icon, %NULL to ignore.
1633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * @error: a #GError location to store the error occuring, or %NULL to
1643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * ignore.
1655247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
1665247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Finishes an asynchronous icon load started in g_loadable_icon_load_async().
1675247f12f3649726471080440de0d37b78c1cec33Andrew Walton *
1685247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Returns: a #GInputStream to read the icon from.
1693781343738de4abddf56982325a77bd70a98cd26Alexander Larsson **/
1703781343738de4abddf56982325a77bd70a98cd26Alexander LarssonGInputStream *
17109471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_load_finish (GLoadableIcon  *icon,
17209471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen			     GAsyncResult   *res,
17309471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen			     char          **type,
17409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen			     GError        **error)
1753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
1763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GLoadableIconIface *iface;
1773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_LOADABLE_ICON (icon), NULL);
1793781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_return_val_if_fail (G_IS_ASYNC_RESULT (res), NULL);
1803781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1813781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  if (G_IS_SIMPLE_ASYNC_RESULT (res))
1823781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    {
1833781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
1843781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      if (g_simple_async_result_propagate_error (simple, error))
1853781343738de4abddf56982325a77bd70a98cd26Alexander Larsson	return NULL;
1863781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    }
1873781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  iface = G_LOADABLE_ICON_GET_IFACE (icon);
1893781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1903781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return (* iface->load_finish) (icon, res, type, error);
1913781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
1923781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1933781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/********************************************
1943781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *   Default implementation of async load   *
1953781343738de4abddf56982325a77bd70a98cd26Alexander Larsson ********************************************/
1963781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
1973781343738de4abddf56982325a77bd70a98cd26Alexander Larssontypedef struct {
1983781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  int size;
1993781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  char *type;
2003781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GInputStream *stream;
2013781343738de4abddf56982325a77bd70a98cd26Alexander Larsson} LoadData;
2023781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2033781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
2043781343738de4abddf56982325a77bd70a98cd26Alexander Larssonload_data_free (LoadData *data)
2053781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
2063781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  if (data->stream)
2073781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    g_object_unref (data->stream);
2083781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_free (data->type);
2093781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_free (data);
2103781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2123781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
2133781343738de4abddf56982325a77bd70a98cd26Alexander Larssonload_async_thread (GSimpleAsyncResult *res,
21409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen		   GObject            *object,
21509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen		   GCancellable       *cancellable)
2163781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
2173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GLoadableIconIface *iface;
2183781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GInputStream *stream;
2193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  LoadData *data;
2203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GError *error = NULL;
2213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  char *type = NULL;
2223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2233781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  data = g_simple_async_result_get_op_res_gpointer (res);
2243781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2253781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  iface = G_LOADABLE_ICON_GET_IFACE (object);
2263781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  stream = iface->load (G_LOADABLE_ICON (object), data->size, &type, cancellable, &error);
2273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  if (stream == NULL)
2293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    {
2303781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      g_simple_async_result_set_from_error (res, error);
2313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      g_error_free (error);
2323781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    }
2333781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  else
2343781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    {
2353781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      data->stream = stream;
2363781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      data->type = type;
2373781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    }
2383781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2393781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2403781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2413781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2423781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic void
24309471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Claseng_loadable_icon_real_load_async (GLoadableIcon       *icon,
24409471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen				 int                  size,
24509471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen				 GCancellable        *cancellable,
24609471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen				 GAsyncReadyCallback  callback,
24709471fec46619a62fbe9b6e7a7b67c9a421f919eMatthias Clasen				 gpointer             user_data)
2483781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
2493781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GSimpleAsyncResult *res;
2503781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  LoadData *data;
2513781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2523781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  res = g_simple_async_result_new (G_OBJECT (icon), callback, user_data, g_loadable_icon_real_load_async);
2533781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  data = g_new0 (LoadData, 1);
2543781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify) load_data_free);
2553781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_simple_async_result_run_in_thread (res, load_async_thread, 0, cancellable);
2563781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  g_object_unref (res);
2573781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2593781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstatic GInputStream *
2603781343738de4abddf56982325a77bd70a98cd26Alexander Larssong_loadable_icon_real_load_finish (GLoadableIcon        *icon,
2613781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GAsyncResult         *res,
2623781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  char                **type,
2633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GError              **error)
2643781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
2653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
2663781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  LoadData *data;
2673781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
268cc3de68e2151cf3341115212c56c17714ca03bb2g_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);
2693781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  data = g_simple_async_result_get_op_res_gpointer (simple);
2713781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2723781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  if (type)
2733781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    {
2743781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      *type = data->type;
2753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson      data->type = NULL;
2763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson    }
2773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
2783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  return g_object_ref (data->stream);
2793781343738de4abddf56982325a77bd70a98cd26Alexander Larsson}
2807f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson
2817f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#define __G_LOADABLE_ICON_C__
2827f3280230bc9448a5750fc17a6eabef691ba25f4Alexander Larsson#include "gioaliasdef.c"
283