[mutter] background: use GFiles instead of filenames
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] background: use GFiles instead of filenames
- Date: Wed, 15 Oct 2014 01:56:05 +0000 (UTC)
commit a37f632b1b34d7a2d4d59d419d869d1ff3c034bf
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Thu Sep 18 18:22:39 2014 -0700
background: use GFiles instead of filenames
We want to use GResources for system backgrounds, so move this to a
GFile.
https://bugzilla.gnome.org/show_bug.cgi?id=736936
src/compositor/meta-background-image.c | 48 ++++++++++++++++-----------
src/compositor/meta-background.c | 56 ++++++++++++++++++++------------
src/meta/meta-background-image.h | 4 +-
src/meta/meta-background.h | 8 ++--
4 files changed, 70 insertions(+), 46 deletions(-)
---
diff --git a/src/compositor/meta-background-image.c b/src/compositor/meta-background-image.c
index af66755..0a05125 100644
--- a/src/compositor/meta-background-image.c
+++ b/src/compositor/meta-background-image.c
@@ -53,7 +53,7 @@ struct _MetaBackgroundImageCacheClass
struct _MetaBackgroundImage
{
GObject parent_instance;
- char *filename;
+ GFile *file;
MetaBackgroundImageCache *cache;
gboolean in_cache;
gboolean loaded;
@@ -70,7 +70,7 @@ G_DEFINE_TYPE (MetaBackgroundImageCache, meta_background_image_cache, G_TYPE_OBJ
static void
meta_background_image_cache_init (MetaBackgroundImageCache *cache)
{
- cache->images = g_hash_table_new (g_str_hash, g_str_equal);
+ cache->images = g_hash_table_new (g_file_hash, (GEqualFunc) g_file_equal);
}
static void
@@ -124,9 +124,17 @@ load_file (GTask *task,
{
GError *error = NULL;
GdkPixbuf *pixbuf;
+ GFileInputStream *stream;
- pixbuf = gdk_pixbuf_new_from_file (image->filename,
- &error);
+ stream = g_file_read (image->file, NULL, &error);
+ if (stream == NULL)
+ {
+ g_task_return_error (task, error);
+ return;
+ }
+
+ pixbuf = gdk_pixbuf_new_from_stream (G_INPUT_STREAM (stream), NULL, &error);
+ g_object_unref (stream);
if (pixbuf == NULL)
{
@@ -156,9 +164,11 @@ file_loaded (GObject *source_object,
if (pixbuf == NULL)
{
+ char *uri = g_file_get_uri (image->file);
g_warning ("Failed to load background '%s': %s",
- image->filename, error->message);
+ uri, error->message);
g_clear_error (&error);
+ g_free (uri);
goto out;
}
@@ -195,7 +205,7 @@ out:
/**
* meta_background_image_cache_load:
* @cache: a #MetaBackgroundImageCache
- * @filename: filename to load
+ * @file: #GFile to load
*
* Loads an image to use as a background, or returns a reference to an
* image that is already in the process of loading or loaded. In either
@@ -209,23 +219,23 @@ out:
*/
MetaBackgroundImage *
meta_background_image_cache_load (MetaBackgroundImageCache *cache,
- const char *filename)
+ GFile *file)
{
MetaBackgroundImage *image;
GTask *task;
g_return_val_if_fail (META_IS_BACKGROUND_IMAGE_CACHE (cache), NULL);
- g_return_val_if_fail (filename != NULL, NULL);
+ g_return_val_if_fail (file != NULL, NULL);
- image = g_hash_table_lookup (cache->images, filename);
+ image = g_hash_table_lookup (cache->images, file);
if (image != NULL)
return g_object_ref (image);
image = g_object_new (META_TYPE_BACKGROUND_IMAGE, NULL);
image->cache = cache;
image->in_cache = TRUE;
- image->filename = g_strdup (filename);
- g_hash_table_insert (cache->images, image->filename, image);
+ image->file = g_object_ref (file);
+ g_hash_table_insert (cache->images, image->file, image);
task = g_task_new (image, NULL, file_loaded, NULL);
@@ -238,25 +248,25 @@ meta_background_image_cache_load (MetaBackgroundImageCache *cache,
/**
* meta_background_image_cache_purge:
* @cache: a #MetaBackgroundImageCache
- * @filename: filename to remove from the cache
+ * @file: file to remove from the cache
*
* Remove an entry from the cache; this would be used if monitoring
* showed that the file changed.
*/
void
meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
- const char *filename)
+ GFile *file)
{
MetaBackgroundImage *image;
g_return_if_fail (META_IS_BACKGROUND_IMAGE_CACHE (cache));
- g_return_if_fail (filename != NULL);
+ g_return_if_fail (file != NULL);
- image = g_hash_table_lookup (cache->images, filename);
+ image = g_hash_table_lookup (cache->images, file);
if (image == NULL)
return;
- g_hash_table_remove (cache->images, image->filename);
+ g_hash_table_remove (cache->images, image->file);
image->in_cache = FALSE;
}
@@ -273,12 +283,12 @@ meta_background_image_finalize (GObject *object)
MetaBackgroundImage *image = META_BACKGROUND_IMAGE (object);
if (image->in_cache)
- g_hash_table_remove (image->cache->images, image->filename);
+ g_hash_table_remove (image->cache->images, image->file);
if (image->texture)
cogl_object_unref (image->texture);
- if (image->filename)
- g_free (image->filename);
+ if (image->file)
+ g_object_unref (image->file);
G_OBJECT_CLASS (meta_background_image_parent_class)->finalize (object);
}
diff --git a/src/compositor/meta-background.c b/src/compositor/meta-background.c
index 0370f55..6284a7a 100644
--- a/src/compositor/meta-background.c
+++ b/src/compositor/meta-background.c
@@ -50,9 +50,9 @@ struct _MetaBackgroundPrivate
ClutterColor color;
ClutterColor second_color;
- char *filename1;
+ GFile *file1;
MetaBackgroundImage *background_image1;
- char *filename2;
+ GFile *file2;
MetaBackgroundImage *background_image2;
CoglTexture *color_texture;
@@ -241,16 +241,28 @@ on_background_loaded (MetaBackgroundImage *image,
mark_changed (self);
}
+static gboolean
+file_equal0 (GFile *file1,
+ GFile *file2)
+{
+ if (file1 == file2)
+ return TRUE;
+
+ if ((file1 == NULL) || (file2 == NULL))
+ return FALSE;
+
+ return g_file_equal (file1, file2);
+}
+
static void
-set_filename (MetaBackground *self,
- char **filenamep,
- MetaBackgroundImage **imagep,
- const char *filename)
+set_file (MetaBackground *self,
+ GFile **filep,
+ MetaBackgroundImage **imagep,
+ GFile *file)
{
- if (g_strcmp0 (filename, *filenamep) != 0)
+ if (!file_equal0 (*filep, file))
{
- g_free (*filenamep);
- *filenamep = g_strdup (filename);
+ g_clear_object (filep);
if (*imagep)
{
@@ -261,10 +273,12 @@ set_filename (MetaBackground *self,
*imagep = NULL;
}
- if (filename)
+ if (file)
{
MetaBackgroundImageCache *cache = meta_background_image_cache_get_default ();
- *imagep = meta_background_image_cache_load (cache, filename);
+
+ *filep = g_object_ref (file);
+ *imagep = meta_background_image_cache_load (cache, file);
g_signal_connect (*imagep, "loaded",
G_CALLBACK (on_background_loaded), self);
}
@@ -280,8 +294,8 @@ meta_background_dispose (GObject *object)
free_color_texture (self);
free_wallpaper_texture (self);
- set_filename (self, &priv->filename1, &priv->background_image1, NULL);
- set_filename (self, &priv->filename2, &priv->background_image2, NULL);
+ set_file (self, &priv->file1, &priv->background_image1, NULL);
+ set_file (self, &priv->file2, &priv->background_image2, NULL);
set_screen (self, NULL);
@@ -867,19 +881,19 @@ meta_background_set_gradient (MetaBackground *self,
}
void
-meta_background_set_filename (MetaBackground *self,
- const char *filename,
- GDesktopBackgroundStyle style)
+meta_background_set_file (MetaBackground *self,
+ GFile *file,
+ GDesktopBackgroundStyle style)
{
g_return_if_fail (META_IS_BACKGROUND (self));
- meta_background_set_blend (self, filename, NULL, 0.0, style);
+ meta_background_set_blend (self, file, NULL, 0.0, style);
}
void
meta_background_set_blend (MetaBackground *self,
- const char *filename1,
- const char *filename2,
+ GFile *file1,
+ GFile *file2,
double blend_factor,
GDesktopBackgroundStyle style)
{
@@ -890,8 +904,8 @@ meta_background_set_blend (MetaBackground *self,
priv = self->priv;
- set_filename (self, &priv->filename1, &priv->background_image1, filename1);
- set_filename (self, &priv->filename2, &priv->background_image2, filename2);
+ set_file (self, &priv->file1, &priv->background_image1, file1);
+ set_file (self, &priv->file2, &priv->background_image2, file2);
priv->blend_factor = blend_factor;
priv->style = style;
diff --git a/src/meta/meta-background-image.h b/src/meta/meta-background-image.h
index f0af93e..fa67b42 100644
--- a/src/meta/meta-background-image.h
+++ b/src/meta/meta-background-image.h
@@ -69,8 +69,8 @@ MetaBackgroundImageCache *meta_background_image_cache_get_default (void);
GType meta_background_image_cache_get_type (void);
MetaBackgroundImage *meta_background_image_cache_load (MetaBackgroundImageCache *cache,
- const char *filename);
+ GFile *file);
void meta_background_image_cache_purge (MetaBackgroundImageCache *cache,
- const char *filename);
+ GFile *file);
#endif /* __META_BACKGROUND_IMAGE_H__ */
diff --git a/src/meta/meta-background.h b/src/meta/meta-background.h
index 38706dc..822d27b 100644
--- a/src/meta/meta-background.h
+++ b/src/meta/meta-background.h
@@ -67,12 +67,12 @@ void meta_background_set_gradient (MetaBackground *self,
GDesktopBackgroundShading shading_direction,
ClutterColor *color,
ClutterColor *second_color);
-void meta_background_set_filename (MetaBackground *self,
- const char *filename,
+void meta_background_set_file (MetaBackground *self,
+ GFile *file,
GDesktopBackgroundStyle style);
void meta_background_set_blend (MetaBackground *self,
- const char *filename1,
- const char *filename2,
+ GFile *file1,
+ GFile *file2,
double blend_factor,
GDesktopBackgroundStyle style);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]