mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
background: purge all background textures on suspend
This commit makes sure all background textures get purged on suspend, which is important for nvidia.
This commit is contained in:
parent
2fc0652886
commit
395d463c08
@ -279,6 +279,34 @@ meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
|
||||
image->in_cache = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* meta_background_image_cache_unload_all:
|
||||
* @cache: a #MetaBackgroundImageCache
|
||||
*
|
||||
* Remove all entries from the cache and unloads them; this would be used
|
||||
* if textures in video memory have been invalidated.
|
||||
*/
|
||||
void
|
||||
meta_background_image_cache_unload_all (MetaBackgroundImageCache *cache)
|
||||
{
|
||||
GHashTableIter iter;
|
||||
gpointer key, value;
|
||||
|
||||
g_return_if_fail (META_IS_BACKGROUND_IMAGE_CACHE (cache));
|
||||
|
||||
g_hash_table_iter_init (&iter, cache->images);
|
||||
while (g_hash_table_iter_next (&iter, &key, &value))
|
||||
{
|
||||
MetaBackgroundImage *image = value;
|
||||
|
||||
g_clear_pointer (&image->texture, cogl_object_unref);
|
||||
image->in_cache = FALSE;
|
||||
image->loaded = FALSE;
|
||||
}
|
||||
|
||||
g_hash_table_remove_all (cache->images);
|
||||
}
|
||||
|
||||
G_DEFINE_TYPE (MetaBackgroundImage, meta_background_image, G_TYPE_OBJECT);
|
||||
|
||||
static void
|
||||
|
@ -317,6 +317,20 @@ meta_background_finalize (GObject *object)
|
||||
G_OBJECT_CLASS (meta_background_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
free_textures (MetaBackground *self)
|
||||
{
|
||||
MetaBackgroundPrivate *priv = self->priv;
|
||||
|
||||
free_color_texture (self);
|
||||
free_wallpaper_texture (self);
|
||||
|
||||
set_file (self, &priv->file1, &priv->background_image1, NULL);
|
||||
set_file (self, &priv->file2, &priv->background_image2, NULL);
|
||||
|
||||
mark_changed (self);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_background_constructed (GObject *object)
|
||||
{
|
||||
@ -326,7 +340,7 @@ meta_background_constructed (GObject *object)
|
||||
G_OBJECT_CLASS (meta_background_parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (meta_screen_get_display (priv->screen), "gl-video-memory-purged",
|
||||
G_CALLBACK (mark_changed), object, G_CONNECT_SWAPPED);
|
||||
G_CALLBACK (free_textures), object, G_CONNECT_SWAPPED);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -960,8 +974,11 @@ meta_background_set_blend (MetaBackground *self,
|
||||
void
|
||||
meta_background_refresh_all (void)
|
||||
{
|
||||
MetaBackgroundImageCache *cache = meta_background_image_cache_get_default ();
|
||||
GSList *l;
|
||||
|
||||
meta_background_image_cache_unload_all (cache);
|
||||
|
||||
for (l = all_backgrounds; l; l = l->next)
|
||||
mark_changed (l->data);
|
||||
}
|
||||
|
@ -73,4 +73,6 @@ MetaBackgroundImage *meta_background_image_cache_load (MetaBackgroundImageCache
|
||||
void meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
|
||||
GFile *file);
|
||||
|
||||
void meta_background_image_cache_unload_all (MetaBackgroundImageCache *cache);
|
||||
|
||||
#endif /* __META_BACKGROUND_IMAGE_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user