static void on_pixbuf_loaded (GObject *source, GAsyncResult *result, gpointer user_data) { GdkPixbuf *pixbuf; pixbuf = load_pixbuf_async_finish (ST_TEXTURE_CACHE (source), result, NULL); finish_texture_load (user_data, pixbuf); g_clear_object (&pixbuf); }
static void on_pixbuf_loaded (GObject *source, GAsyncResult *result, gpointer user_data) { GSList *iter; StTextureCache *cache; AsyncTextureLoadData *data; GdkPixbuf *pixbuf; GError *error = NULL; CoglHandle texdata = NULL; data = user_data; cache = ST_TEXTURE_CACHE (source); g_hash_table_remove (cache->priv->outstanding_requests, data->key); pixbuf = load_pixbuf_async_finish (cache, result, &error); if (pixbuf == NULL) goto out; texdata = pixbuf_to_cogl_handle (pixbuf, data->enforced_square); g_object_unref (pixbuf); if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE) { gpointer orig_key, value; if (!g_hash_table_lookup_extended (cache->priv->keyed_cache, data->key, &orig_key, &value)) { cogl_handle_ref (texdata); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (data->key), texdata); } } for (iter = data->textures; iter; iter = iter->next) { ClutterTexture *texture = iter->data; set_texture_cogl_texture (texture, texdata); } out: if (texdata) cogl_handle_unref (texdata); texture_load_data_destroy (data); g_free (data); g_clear_error (&error); }
static void update_scale_factor (GSettings *settings, gchar *key, gpointer data) { StTextureCache *cache = ST_TEXTURE_CACHE (data); cache->priv->scale = g_settings_get_int (settings, key); active_scale = cache->priv->scale; on_icon_theme_changed (cache->priv->icon_theme, cache); }
static void on_pixbuf_loaded (GObject *source, GAsyncResult *result, gpointer user_data) { GSList *iter; StTextureCache *cache; AsyncTextureLoadData *data; GdkPixbuf *pixbuf; GError *error = NULL; CoglHandle texdata = NULL; data = user_data; cache = ST_TEXTURE_CACHE (source); g_hash_table_remove (cache->priv->outstanding_requests, data->key); pixbuf = load_pixbuf_async_finish (cache, result, &error); if (pixbuf == NULL) pixbuf = load_pixbuf_fallback (data); if (pixbuf == NULL) goto out; texdata = pixbuf_to_cogl_handle (pixbuf); g_object_unref (pixbuf); if (data->policy != ST_TEXTURE_CACHE_POLICY_NONE) { gpointer orig_key, value; if (!g_hash_table_lookup_extended (cache->priv->keyed_cache, data->key, &orig_key, &value)) { cogl_handle_ref (texdata); g_hash_table_insert (cache->priv->keyed_cache, g_strdup (data->key), texdata); } } for (iter = data->textures; iter; iter = iter->next) { ClutterTexture *texture = iter->data; set_texture_cogl_texture (texture, texdata); } out: if (texdata) cogl_handle_unref (texdata); g_free (data->key); if (data->icon) { gtk_icon_info_free (data->icon_info); g_object_unref (data->icon); } else if (data->uri) g_free (data->uri); if (data->recent_info) gtk_recent_info_unref (data->recent_info); if (data->mimetype) g_free (data->mimetype); /* Alternatively we could weakref and just do nothing if the texture is destroyed */ for (iter = data->textures; iter; iter = iter->next) { ClutterTexture *texture = iter->data; g_object_unref (texture); } g_clear_error (&error); g_free (data); }