mirror of
https://github.com/brl/mutter.git
synced 2024-11-25 09:30:45 -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;
|
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);
|
G_DEFINE_TYPE (MetaBackgroundImage, meta_background_image, G_TYPE_OBJECT);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -317,6 +317,20 @@ meta_background_finalize (GObject *object)
|
|||||||
G_OBJECT_CLASS (meta_background_parent_class)->finalize (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
|
static void
|
||||||
meta_background_constructed (GObject *object)
|
meta_background_constructed (GObject *object)
|
||||||
{
|
{
|
||||||
@ -326,7 +340,7 @@ meta_background_constructed (GObject *object)
|
|||||||
G_OBJECT_CLASS (meta_background_parent_class)->constructed (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_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
|
static void
|
||||||
@ -960,8 +974,11 @@ meta_background_set_blend (MetaBackground *self,
|
|||||||
void
|
void
|
||||||
meta_background_refresh_all (void)
|
meta_background_refresh_all (void)
|
||||||
{
|
{
|
||||||
|
MetaBackgroundImageCache *cache = meta_background_image_cache_get_default ();
|
||||||
GSList *l;
|
GSList *l;
|
||||||
|
|
||||||
|
meta_background_image_cache_unload_all (cache);
|
||||||
|
|
||||||
for (l = all_backgrounds; l; l = l->next)
|
for (l = all_backgrounds; l; l = l->next)
|
||||||
mark_changed (l->data);
|
mark_changed (l->data);
|
||||||
}
|
}
|
||||||
|
@ -73,4 +73,6 @@ MetaBackgroundImage *meta_background_image_cache_load (MetaBackgroundImageCache
|
|||||||
void meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
|
void meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
|
||||||
GFile *file);
|
GFile *file);
|
||||||
|
|
||||||
|
void meta_background_image_cache_unload_all (MetaBackgroundImageCache *cache);
|
||||||
|
|
||||||
#endif /* __META_BACKGROUND_IMAGE_H__ */
|
#endif /* __META_BACKGROUND_IMAGE_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user