background: Use g_auto for variables
https://bugzilla.gnome.org/show_bug.cgi?id=788155
This commit is contained in:
parent
bb3ff84929
commit
0baacee873
9 changed files with 218 additions and 373 deletions
|
@ -57,7 +57,7 @@ struct {
|
|||
{ G_DESKTOP_BACKGROUND_SHADING_SOLID, -1, "#7a634b" },
|
||||
};
|
||||
|
||||
static char *
|
||||
static gchar *
|
||||
get_colors_path (void)
|
||||
{
|
||||
return g_build_filename (g_get_user_config_dir (), "gnome-control-center", "backgrounds", "colors.ini", NULL);
|
||||
|
@ -77,8 +77,8 @@ bg_colors_source_add_color (BgColorsSource *self,
|
|||
GtkTreeRowReference **ret_row_ref)
|
||||
{
|
||||
CcBackgroundItemFlags flags;
|
||||
CcBackgroundItem *item;
|
||||
GdkPixbuf *pixbuf;
|
||||
g_autoptr(CcBackgroundItem) item = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
cairo_surface_t *surface;
|
||||
int scale_factor;
|
||||
int thumbnail_height, thumbnail_width;
|
||||
|
@ -116,6 +116,7 @@ bg_colors_source_add_color (BgColorsSource *self,
|
|||
0, surface,
|
||||
1, item,
|
||||
-1);
|
||||
cairo_surface_destroy (surface);
|
||||
|
||||
if (ret_row_ref)
|
||||
{
|
||||
|
@ -125,21 +126,17 @@ bg_colors_source_add_color (BgColorsSource *self,
|
|||
*ret_row_ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (store), path);
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
cairo_surface_destroy (surface);
|
||||
g_object_unref (pixbuf);
|
||||
g_object_unref (item);
|
||||
}
|
||||
|
||||
static void
|
||||
bg_colors_source_constructed (GObject *object)
|
||||
{
|
||||
BgColorsSource *self = BG_COLORS_SOURCE (object);
|
||||
GnomeDesktopThumbnailFactory *thumb_factory;
|
||||
g_autoptr(GnomeDesktopThumbnailFactory) thumb_factory = NULL;
|
||||
guint i;
|
||||
GtkListStore *store;
|
||||
GKeyFile *keyfile;
|
||||
char *path;
|
||||
g_autoptr(GKeyFile) keyfile = NULL;
|
||||
g_autofree gchar *path = NULL;
|
||||
|
||||
G_OBJECT_CLASS (bg_colors_source_parent_class)->constructed (object);
|
||||
|
||||
|
@ -155,21 +152,14 @@ bg_colors_source_constructed (GObject *object)
|
|||
path = get_colors_path ();
|
||||
if (g_key_file_load_from_file (keyfile, path, G_KEY_FILE_NONE, NULL))
|
||||
{
|
||||
char **colors;
|
||||
g_auto(GStrv) colors = NULL;
|
||||
|
||||
colors = g_key_file_get_string_list (keyfile, "Colors", "custom-colors", NULL, NULL);
|
||||
for (i = 0; colors != NULL && colors[i] != NULL; i++)
|
||||
{
|
||||
bg_colors_source_add_color (self, thumb_factory, store, colors[i], NULL);
|
||||
}
|
||||
|
||||
if (colors)
|
||||
g_strfreev (colors);
|
||||
}
|
||||
g_key_file_unref (keyfile);
|
||||
g_free (path);
|
||||
|
||||
g_object_unref (thumb_factory);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -177,14 +167,15 @@ bg_colors_source_add (BgColorsSource *self,
|
|||
GdkRGBA *rgba,
|
||||
GtkTreeRowReference **ret_row_ref)
|
||||
{
|
||||
GnomeDesktopThumbnailFactory *thumb_factory;
|
||||
g_autoptr(GnomeDesktopThumbnailFactory) thumb_factory = NULL;
|
||||
GtkListStore *store;
|
||||
gchar *c;
|
||||
char **colors;
|
||||
g_autofree gchar *c = NULL;
|
||||
g_auto(GStrv) colors = NULL;
|
||||
gsize len;
|
||||
GKeyFile *keyfile;
|
||||
GError *error = NULL;
|
||||
char *path;
|
||||
g_autoptr(GKeyFile) keyfile = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autofree gchar *dir = NULL;
|
||||
g_autofree gchar *path = NULL;
|
||||
|
||||
c = g_strdup_printf ("#%02x%02x%02x",
|
||||
(int)(255*rgba->red),
|
||||
|
@ -196,12 +187,9 @@ bg_colors_source_add (BgColorsSource *self,
|
|||
|
||||
bg_colors_source_add_color (self, thumb_factory, store, c, ret_row_ref);
|
||||
|
||||
g_object_unref (thumb_factory);
|
||||
|
||||
/* Save to the keyfile */
|
||||
path = get_colors_dir ();
|
||||
g_mkdir_with_parents (path, 0700);
|
||||
g_free (path);
|
||||
dir = get_colors_dir ();
|
||||
g_mkdir_with_parents (dir, 0700);
|
||||
|
||||
path = get_colors_path ();
|
||||
colors = NULL;
|
||||
|
@ -212,15 +200,12 @@ bg_colors_source_add (BgColorsSource *self,
|
|||
colors = g_key_file_get_string_list (keyfile, "Colors", "custom-colors", &len, NULL);
|
||||
|
||||
if (len == 0 && colors != NULL)
|
||||
{
|
||||
g_strfreev (colors);
|
||||
colors = NULL;
|
||||
}
|
||||
g_clear_pointer (&colors, g_strfreev);
|
||||
|
||||
if (colors == NULL)
|
||||
{
|
||||
colors = g_new0 (char *, 2);
|
||||
colors[0] = c;
|
||||
colors[0] = g_steal_pointer (&c);
|
||||
len = 1;
|
||||
}
|
||||
else
|
||||
|
@ -235,7 +220,7 @@ bg_colors_source_add (BgColorsSource *self,
|
|||
colors[i] = NULL;
|
||||
}
|
||||
|
||||
new_colors[len] = c;
|
||||
new_colors[len] = g_steal_pointer (&c);
|
||||
len++;
|
||||
|
||||
g_strfreev (colors);
|
||||
|
@ -245,13 +230,7 @@ bg_colors_source_add (BgColorsSource *self,
|
|||
g_key_file_set_string_list (keyfile, "Colors", "custom-colors", (const gchar * const*) colors, len);
|
||||
|
||||
if (!g_key_file_save_to_file (keyfile, path, &error))
|
||||
{
|
||||
g_warning ("Could not save custom color: %s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
|
||||
g_key_file_unref (keyfile);
|
||||
g_strfreev (colors);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -170,8 +170,8 @@ picture_scaled (GObject *source_object,
|
|||
{
|
||||
BgPicturesSource *bg_source;
|
||||
CcBackgroundItem *item;
|
||||
GError *error = NULL;
|
||||
GdkPixbuf *pixbuf = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
const char *software;
|
||||
const char *uri;
|
||||
GtkTreeIter iter;
|
||||
|
@ -192,8 +192,7 @@ picture_scaled (GObject *source_object,
|
|||
remove_placeholder (BG_PICTURES_SOURCE (user_data), item);
|
||||
}
|
||||
|
||||
g_error_free (error);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
|
||||
/* since we were not cancelled, we can now cast user_data
|
||||
|
@ -212,7 +211,7 @@ picture_scaled (GObject *source_object,
|
|||
{
|
||||
g_debug ("Ignored URL '%s' as it's a screenshot from gnome-screenshot", uri);
|
||||
remove_placeholder (BG_PICTURES_SOURCE (user_data), item);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Process embedded orientation */
|
||||
|
@ -222,7 +221,7 @@ picture_scaled (GObject *source_object,
|
|||
{
|
||||
/* the width and height of pixbuf we requested are wrong for EXIF
|
||||
* orientations 5, 6, 7 and 8. the file has to be reloaded. */
|
||||
GFile *file;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
|
||||
file = g_file_new_for_uri (uri);
|
||||
g_object_set_data (G_OBJECT (item), "needs-rotation", GINT_TO_POINTER (TRUE));
|
||||
|
@ -230,8 +229,7 @@ picture_scaled (GObject *source_object,
|
|||
g_file_read_async (G_FILE (file), G_PRIORITY_DEFAULT,
|
||||
bg_source->cancellable,
|
||||
picture_opened_for_read, bg_source);
|
||||
g_object_unref (file);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
|
||||
pixbuf = swap_rotated_pixbuf (pixbuf);
|
||||
|
@ -265,10 +263,7 @@ picture_scaled (GObject *source_object,
|
|||
bg_pictures_source_get_unique_filename (uri),
|
||||
GINT_TO_POINTER (TRUE));
|
||||
|
||||
|
||||
out:
|
||||
g_clear_pointer (&surface, (GDestroyNotify) cairo_surface_destroy);
|
||||
g_clear_object (&pixbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -278,8 +273,8 @@ picture_opened_for_read (GObject *source_object,
|
|||
{
|
||||
BgPicturesSource *bg_source;
|
||||
CcBackgroundItem *item;
|
||||
GFileInputStream *stream;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GFileInputStream) stream = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
gint thumbnail_height;
|
||||
gint thumbnail_width;
|
||||
gboolean needs_rotation;
|
||||
|
@ -290,13 +285,11 @@ picture_opened_for_read (GObject *source_object,
|
|||
{
|
||||
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
{
|
||||
char *filename = g_file_get_path (G_FILE (source_object));
|
||||
g_autofree gchar *filename = g_file_get_path (G_FILE (source_object));
|
||||
g_warning ("Failed to load picture '%s': %s", filename, error->message);
|
||||
remove_placeholder (BG_PICTURES_SOURCE (user_data), item);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -325,7 +318,6 @@ picture_opened_for_read (GObject *source_object,
|
|||
TRUE,
|
||||
bg_source->cancellable,
|
||||
picture_scaled, bg_source);
|
||||
g_object_unref (stream);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -335,22 +327,21 @@ picture_copied_for_read (GObject *source_object,
|
|||
{
|
||||
BgPicturesSource *bg_source;
|
||||
CcBackgroundItem *item;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
GFile *thumbnail_file = G_FILE (source_object);
|
||||
GFile *native_file;
|
||||
|
||||
if (!g_file_copy_finish (thumbnail_file, res, &error))
|
||||
{
|
||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
goto out;
|
||||
return;
|
||||
else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
|
||||
{
|
||||
gchar *uri;
|
||||
g_autofree gchar *uri = NULL;
|
||||
|
||||
uri = g_file_get_uri (thumbnail_file);
|
||||
g_warning ("Failed to download '%s': %s", uri, error->message);
|
||||
g_free (uri);
|
||||
goto out;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -364,9 +355,6 @@ picture_copied_for_read (GObject *source_object,
|
|||
bg_source->cancellable,
|
||||
picture_opened_for_read,
|
||||
bg_source);
|
||||
|
||||
out:
|
||||
g_clear_error (&error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -393,9 +381,10 @@ static cairo_surface_t *
|
|||
get_content_loading_icon (BgSource *source)
|
||||
{
|
||||
GtkIconTheme *theme;
|
||||
GtkIconInfo *icon_info;
|
||||
GdkPixbuf *pixbuf, *ret;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GtkIconInfo) icon_info = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
g_autoptr(GdkPixbuf) ret = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
int scale_factor;
|
||||
cairo_surface_t *surface;
|
||||
int thumbnail_height;
|
||||
|
@ -416,8 +405,6 @@ get_content_loading_icon (BgSource *source)
|
|||
if (pixbuf == NULL)
|
||||
{
|
||||
g_warning ("Failed to load placeholder icon: %s", error->message);
|
||||
g_clear_error (&error);
|
||||
g_clear_object (&icon_info);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -434,12 +421,9 @@ get_content_loading_icon (BgSource *source)
|
|||
ret,
|
||||
(thumbnail_width - gdk_pixbuf_get_width (pixbuf)) / 2,
|
||||
(thumbnail_height - gdk_pixbuf_get_height (pixbuf)) / 2);
|
||||
g_object_unref (pixbuf);
|
||||
|
||||
scale_factor = bg_source_get_scale_factor (source);
|
||||
surface = gdk_cairo_surface_create_from_pixbuf (ret, scale_factor, NULL);
|
||||
g_object_unref (ret);
|
||||
g_clear_object (&icon_info);
|
||||
|
||||
return surface;
|
||||
}
|
||||
|
@ -447,12 +431,11 @@ get_content_loading_icon (BgSource *source)
|
|||
static GFile *
|
||||
bg_pictures_source_get_cache_file (void)
|
||||
{
|
||||
char *path;
|
||||
g_autofree gchar *path = NULL;
|
||||
GFile *file;
|
||||
|
||||
path = bg_pictures_source_get_cache_path ();
|
||||
file = g_file_new_for_path (path);
|
||||
g_free (path);
|
||||
|
||||
return file;
|
||||
}
|
||||
|
@ -464,18 +447,19 @@ add_single_file (BgPicturesSource *bg_source,
|
|||
guint64 mtime,
|
||||
GtkTreeRowReference **ret_row_ref)
|
||||
{
|
||||
CcBackgroundItem *item = NULL;
|
||||
g_autoptr(CcBackgroundItem) item = NULL;
|
||||
CcBackgroundItemFlags flags = 0;
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
GtkTreePath *path = NULL;
|
||||
GtkTreeRowReference *row_ref = NULL;
|
||||
cairo_surface_t *surface = NULL;
|
||||
char *source_uri = NULL;
|
||||
char *uri = NULL;
|
||||
g_autofree gchar *source_uri = NULL;
|
||||
g_autofree gchar *uri = NULL;
|
||||
gboolean needs_download;
|
||||
gboolean retval = FALSE;
|
||||
GFile *pictures_dir, *cache_dir;
|
||||
g_autoptr(GFile) pictures_dir = NULL;
|
||||
g_autoptr(GFile) cache_dir = NULL;
|
||||
GrlMedia *media;
|
||||
|
||||
/* find png and jpeg files */
|
||||
|
@ -491,8 +475,6 @@ add_single_file (BgPicturesSource *bg_source,
|
|||
cache_dir = bg_pictures_source_get_cache_file ();
|
||||
needs_download = !g_file_has_parent (file, pictures_dir) &&
|
||||
!g_file_has_parent (file, cache_dir);
|
||||
g_object_unref (pictures_dir);
|
||||
g_object_unref (cache_dir);
|
||||
|
||||
if (!needs_download)
|
||||
{
|
||||
|
@ -501,8 +483,7 @@ add_single_file (BgPicturesSource *bg_source,
|
|||
}
|
||||
else
|
||||
{
|
||||
source_uri = uri;
|
||||
uri = NULL;
|
||||
source_uri = g_steal_pointer (&uri);
|
||||
}
|
||||
|
||||
item = cc_background_item_new (uri);
|
||||
|
@ -545,10 +526,10 @@ add_single_file (BgPicturesSource *bg_source,
|
|||
}
|
||||
else
|
||||
{
|
||||
GFile *native_file;
|
||||
GFile *thumbnail_file = NULL;
|
||||
gchar *native_dir;
|
||||
gchar *native_path;
|
||||
g_autoptr(GFile) native_file = NULL;
|
||||
g_autoptr(GFile) thumbnail_file = NULL;
|
||||
g_autofree gchar *native_dir = NULL;
|
||||
g_autofree gchar *native_path = NULL;
|
||||
const gchar *title;
|
||||
const gchar *thumbnail_uri;
|
||||
|
||||
|
@ -578,11 +559,6 @@ add_single_file (BgPicturesSource *bg_source,
|
|||
NULL,
|
||||
picture_copied_for_read,
|
||||
bg_source);
|
||||
|
||||
g_clear_object (&thumbnail_file);
|
||||
g_object_unref (native_file);
|
||||
g_free (native_dir);
|
||||
g_free (native_path);
|
||||
}
|
||||
|
||||
retval = TRUE;
|
||||
|
@ -597,10 +573,6 @@ add_single_file (BgPicturesSource *bg_source,
|
|||
}
|
||||
gtk_tree_path_free (path);
|
||||
g_clear_pointer (&surface, (GDestroyNotify) cairo_surface_destroy);
|
||||
g_clear_object (&item);
|
||||
g_object_unref (file);
|
||||
g_free (source_uri);
|
||||
g_free (uri);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -648,7 +620,7 @@ bg_pictures_source_add (BgPicturesSource *bg_source,
|
|||
const char *uri,
|
||||
GtkTreeRowReference **ret_row_ref)
|
||||
{
|
||||
GFile *file;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
GFileInfo *info;
|
||||
gboolean retval;
|
||||
|
||||
|
@ -677,7 +649,7 @@ bg_pictures_source_remove (BgPicturesSource *bg_source,
|
|||
cont = gtk_tree_model_get_iter_first (model, &iter);
|
||||
while (cont)
|
||||
{
|
||||
CcBackgroundItem *tmp_item;
|
||||
g_autoptr(CcBackgroundItem) tmp_item = NULL;
|
||||
const char *tmp_uri;
|
||||
|
||||
gtk_tree_model_get (model, &iter, 1, &tmp_item, -1);
|
||||
|
@ -693,7 +665,6 @@ bg_pictures_source_remove (BgPicturesSource *bg_source,
|
|||
retval = TRUE;
|
||||
break;
|
||||
}
|
||||
g_object_unref (tmp_item);
|
||||
cont = gtk_tree_model_iter_next (model, &iter);
|
||||
}
|
||||
return retval;
|
||||
|
@ -721,7 +692,7 @@ file_info_async_ready (GObject *source,
|
|||
{
|
||||
BgPicturesSource *bg_source;
|
||||
GList *files, *l;
|
||||
GError *err = NULL;
|
||||
g_autoptr(GError) err = NULL;
|
||||
GFile *parent;
|
||||
|
||||
files = g_file_enumerator_next_files_finish (G_FILE_ENUMERATOR (source),
|
||||
|
@ -731,7 +702,6 @@ file_info_async_ready (GObject *source,
|
|||
{
|
||||
if (!g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
g_warning ("Could not get pictures file information: %s", err->message);
|
||||
g_error_free (err);
|
||||
|
||||
g_list_foreach (files, (GFunc) g_object_unref, NULL);
|
||||
g_list_free (files);
|
||||
|
@ -748,7 +718,7 @@ file_info_async_ready (GObject *source,
|
|||
for (l = files; l; l = g_list_next (l))
|
||||
{
|
||||
GFileInfo *info = l->data;
|
||||
GFile *file;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
|
||||
file = g_file_get_child (parent, g_file_info_get_name (info));
|
||||
|
||||
|
@ -765,8 +735,8 @@ dir_enum_async_ready (GObject *s,
|
|||
gpointer user_data)
|
||||
{
|
||||
BgPicturesSource *source = (BgPicturesSource *) user_data;
|
||||
GFileEnumerator *enumerator;
|
||||
GError *err = NULL;
|
||||
g_autoptr(GFileEnumerator) enumerator = NULL;
|
||||
g_autoptr(GError) err = NULL;
|
||||
|
||||
enumerator = g_file_enumerate_children_finish (G_FILE (s), res, &err);
|
||||
|
||||
|
@ -774,7 +744,6 @@ dir_enum_async_ready (GObject *s,
|
|||
{
|
||||
if (!g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
g_warning ("Could not fill pictures source: %s", err->message);
|
||||
g_error_free (err);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -785,7 +754,6 @@ dir_enum_async_ready (GObject *s,
|
|||
source->cancellable,
|
||||
file_info_async_ready,
|
||||
user_data);
|
||||
g_object_unref (enumerator);
|
||||
}
|
||||
|
||||
char *
|
||||
|
@ -800,13 +768,12 @@ bg_pictures_source_get_cache_path (void)
|
|||
static char *
|
||||
bg_pictures_source_get_unique_filename (const char *uri)
|
||||
{
|
||||
GChecksum *csum;
|
||||
g_autoptr(GChecksum) csum = NULL;
|
||||
char *ret;
|
||||
|
||||
csum = g_checksum_new (G_CHECKSUM_SHA256);
|
||||
g_checksum_update (csum, (guchar *) uri, -1);
|
||||
ret = g_strdup (g_checksum_get_string (csum));
|
||||
g_checksum_free (csum);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -814,37 +781,29 @@ bg_pictures_source_get_unique_filename (const char *uri)
|
|||
char *
|
||||
bg_pictures_source_get_unique_path (const char *uri)
|
||||
{
|
||||
GFile *parent, *file;
|
||||
char *cache_path;
|
||||
char *filename;
|
||||
char *ret;
|
||||
g_autoptr(GFile) parent = NULL;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
g_autofree gchar *cache_path = NULL;
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
cache_path = bg_pictures_source_get_cache_path ();
|
||||
parent = g_file_new_for_path (cache_path);
|
||||
g_free (cache_path);
|
||||
|
||||
filename = bg_pictures_source_get_unique_filename (uri);
|
||||
file = g_file_get_child (parent, filename);
|
||||
g_free (filename);
|
||||
ret = g_file_get_path (file);
|
||||
g_object_unref (file);
|
||||
g_object_unref (parent);
|
||||
|
||||
return ret;
|
||||
return g_file_get_path (file);
|
||||
}
|
||||
|
||||
gboolean
|
||||
bg_pictures_source_is_known (BgPicturesSource *bg_source,
|
||||
const char *uri)
|
||||
{
|
||||
gboolean retval;
|
||||
char *uuid;
|
||||
g_autofree gchar *uuid = NULL;
|
||||
|
||||
uuid = bg_pictures_source_get_unique_filename (uri);
|
||||
retval = (GPOINTER_TO_INT (g_hash_table_lookup (bg_source->known_items, uuid)));
|
||||
g_free (uuid);
|
||||
|
||||
return retval;
|
||||
return GPOINTER_TO_INT (g_hash_table_lookup (bg_source->known_items, uuid));
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -853,8 +812,8 @@ sort_func (GtkTreeModel *model,
|
|||
GtkTreeIter *b,
|
||||
BgPicturesSource *bg_source)
|
||||
{
|
||||
CcBackgroundItem *item_a;
|
||||
CcBackgroundItem *item_b;
|
||||
g_autoptr(CcBackgroundItem) item_a = NULL;
|
||||
g_autoptr(CcBackgroundItem) item_b = NULL;
|
||||
guint64 modified_a;
|
||||
guint64 modified_b;
|
||||
int retval;
|
||||
|
@ -871,9 +830,6 @@ sort_func (GtkTreeModel *model,
|
|||
|
||||
retval = modified_b - modified_a;
|
||||
|
||||
g_object_unref (item_a);
|
||||
g_object_unref (item_b);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -896,10 +852,6 @@ file_info_ready (GObject *object,
|
|||
return;
|
||||
}
|
||||
|
||||
/* Up the ref count so we can re-use the add_single_item code path which
|
||||
* reduces the ref count.
|
||||
*/
|
||||
g_object_ref (file);
|
||||
add_single_file_from_info (BG_PICTURES_SOURCE (user_data), file, info, NULL);
|
||||
}
|
||||
|
||||
|
@ -907,7 +859,7 @@ static void
|
|||
file_added (GFile *file,
|
||||
BgPicturesSource *self)
|
||||
{
|
||||
char *uri;
|
||||
g_autofree gchar *uri = NULL;
|
||||
uri = g_file_get_uri (file);
|
||||
|
||||
if (!bg_pictures_source_is_known (self, uri))
|
||||
|
@ -920,8 +872,6 @@ file_added (GFile *file,
|
|||
file_info_ready,
|
||||
self);
|
||||
}
|
||||
|
||||
g_free (uri);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -932,7 +882,7 @@ files_changed_cb (GFileMonitor *monitor,
|
|||
gpointer user_data)
|
||||
{
|
||||
BgPicturesSource *self = BG_PICTURES_SOURCE (user_data);
|
||||
char *uri;
|
||||
g_autofree gchar *uri = NULL;
|
||||
|
||||
switch (event_type)
|
||||
{
|
||||
|
@ -943,7 +893,6 @@ files_changed_cb (GFileMonitor *monitor,
|
|||
case G_FILE_MONITOR_EVENT_DELETED:
|
||||
uri = g_file_get_uri (file);
|
||||
bg_pictures_source_remove (self, uri);
|
||||
g_free (uri);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -956,7 +905,7 @@ monitor_path (BgPicturesSource *self,
|
|||
const char *path)
|
||||
{
|
||||
GFileMonitor *monitor;
|
||||
GFile *dir;
|
||||
g_autoptr(GFile) dir = NULL;
|
||||
|
||||
g_mkdir_with_parents (path, USER_DIR_MODE);
|
||||
|
||||
|
@ -978,15 +927,13 @@ monitor_path (BgPicturesSource *self,
|
|||
G_CALLBACK (files_changed_cb),
|
||||
self);
|
||||
|
||||
g_object_unref (dir);
|
||||
|
||||
return monitor;
|
||||
}
|
||||
|
||||
static void
|
||||
media_found_cb (BgPicturesSource *self, GrlMedia *media)
|
||||
{
|
||||
GFile *file = NULL;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
const gchar *uri;
|
||||
|
||||
uri = grl_media_get_url (media);
|
||||
|
@ -999,7 +946,7 @@ static void
|
|||
bg_pictures_source_init (BgPicturesSource *self)
|
||||
{
|
||||
const gchar *pictures_path;
|
||||
char *cache_path;
|
||||
g_autofree gchar *cache_path = NULL;
|
||||
GtkListStore *store;
|
||||
|
||||
self->cancellable = g_cancellable_new ();
|
||||
|
@ -1016,7 +963,6 @@ bg_pictures_source_init (BgPicturesSource *self)
|
|||
|
||||
cache_path = bg_pictures_source_get_cache_path ();
|
||||
self->cache_dir_monitor = monitor_path (self, cache_path);
|
||||
g_free (cache_path);
|
||||
|
||||
self->grl_miner = cc_background_grilo_miner_new ();
|
||||
g_signal_connect_swapped (self->grl_miner, "media-found", G_CALLBACK (media_found_cb), self);
|
||||
|
|
|
@ -43,9 +43,9 @@ load_wallpapers (gchar *key,
|
|||
BgWallpapersSource *source)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GdkPixbuf *pixbuf;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
GtkListStore *store = bg_source_get_liststore (BG_SOURCE (source));
|
||||
cairo_surface_t *surface = NULL;
|
||||
cairo_surface_t *surface;
|
||||
gboolean deleted;
|
||||
gint scale_factor;
|
||||
gint thumbnail_height;
|
||||
|
@ -65,7 +65,7 @@ load_wallpapers (gchar *key,
|
|||
thumbnail_width, thumbnail_height,
|
||||
scale_factor);
|
||||
if (pixbuf == NULL)
|
||||
goto out;
|
||||
return;
|
||||
|
||||
surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale_factor, NULL);
|
||||
gtk_list_store_set (store, &iter,
|
||||
|
@ -73,11 +73,7 @@ load_wallpapers (gchar *key,
|
|||
1, item,
|
||||
2, cc_background_item_get_name (item),
|
||||
-1);
|
||||
|
||||
out:
|
||||
g_clear_pointer (&surface, (GDestroyNotify) cairo_surface_destroy);
|
||||
if (pixbuf)
|
||||
g_object_unref (pixbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -100,22 +96,20 @@ static void
|
|||
load_default_bg (BgWallpapersSource *self)
|
||||
{
|
||||
const char * const *system_data_dirs;
|
||||
char *filename;
|
||||
guint i;
|
||||
|
||||
/* FIXME We could do this nicer if we had the XML source in GSettings */
|
||||
|
||||
system_data_dirs = g_get_system_data_dirs ();
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
filename = g_build_filename (system_data_dirs[i],
|
||||
"gnome-background-properties",
|
||||
"adwaita.xml",
|
||||
NULL);
|
||||
if (cc_background_xml_load_xml (self->xml, filename)) {
|
||||
g_free (filename);
|
||||
if (cc_background_xml_load_xml (self->xml, filename))
|
||||
break;
|
||||
}
|
||||
g_free (filename);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -349,7 +349,7 @@ cc_background_panel_drag_items (GtkWidget *widget,
|
|||
{
|
||||
gint i;
|
||||
char *uri;
|
||||
gchar **uris;
|
||||
g_auto(GStrv) uris = NULL;
|
||||
gboolean ret = FALSE;
|
||||
|
||||
if (info == COLOR)
|
||||
|
@ -372,8 +372,6 @@ cc_background_panel_drag_items (GtkWidget *widget,
|
|||
}
|
||||
}
|
||||
|
||||
g_strfreev (uris);
|
||||
|
||||
out:
|
||||
gtk_drag_finish (context, ret, FALSE, time);
|
||||
}
|
||||
|
@ -452,10 +450,12 @@ cc_background_chooser_dialog_init (CcBackgroundChooserDialog *chooser)
|
|||
GtkWidget *label;
|
||||
GtkWidget *switcher;
|
||||
GtkStyleContext *context;
|
||||
gchar *markup, *href;
|
||||
g_autofree gchar *markup = NULL;
|
||||
g_autofree gchar *markup2 = NULL;
|
||||
g_autofree gchar *href = NULL;
|
||||
const gchar *pictures_dir;
|
||||
gchar *pictures_dir_basename;
|
||||
gchar *pictures_dir_uri;
|
||||
g_autofree gchar *pictures_dir_basename = NULL;
|
||||
g_autofree gchar *pictures_dir_uri = NULL;
|
||||
GtkTargetList *target_list;
|
||||
|
||||
chooser->wallpapers_source = bg_wallpapers_source_new (GTK_WINDOW (chooser));
|
||||
|
@ -526,8 +526,7 @@ cc_background_chooser_dialog_init (CcBackgroundChooserDialog *chooser)
|
|||
markup = g_markup_printf_escaped ("<b><span size='large'>%s</span></b>",
|
||||
/* translators: No pictures were found */
|
||||
_("No Pictures Found"));
|
||||
gtk_label_set_markup (GTK_LABEL (label), (const gchar *) markup);
|
||||
g_free (markup);
|
||||
gtk_label_set_markup (GTK_LABEL (label), markup);
|
||||
gtk_widget_show (label);
|
||||
gtk_container_add (GTK_CONTAINER (labels_grid), label);
|
||||
label = gtk_label_new ("");
|
||||
|
@ -550,15 +549,11 @@ cc_background_chooser_dialog_init (CcBackgroundChooserDialog *chooser)
|
|||
|
||||
pictures_dir_uri = g_filename_to_uri (pictures_dir, NULL, NULL);
|
||||
href = g_markup_printf_escaped ("<a href=\"%s\">%s</a>", pictures_dir_uri, pictures_dir_basename);
|
||||
g_free (pictures_dir_uri);
|
||||
g_free (pictures_dir_basename);
|
||||
|
||||
/* translators: %s here is the name of the Pictures directory, the string should be translated in
|
||||
* the context "You can add images to your Pictures folder and they will show up here" */
|
||||
markup = g_strdup_printf (_("You can add images to your %s folder and they will show up here"), href);
|
||||
g_free (href);
|
||||
gtk_label_set_markup (GTK_LABEL (label), (const gchar *) markup);
|
||||
g_free (markup);
|
||||
markup2 = g_strdup_printf (_("You can add images to your %s folder and they will show up here"), href);
|
||||
gtk_label_set_markup (GTK_LABEL (label), markup2);
|
||||
gtk_widget_show (label);
|
||||
gtk_container_add (GTK_CONTAINER (labels_grid), label);
|
||||
|
||||
|
|
|
@ -101,9 +101,9 @@ searched_online_source (GrlSource *source,
|
|||
const GError *error)
|
||||
{
|
||||
CcBackgroundGriloMiner *self = CC_BACKGROUND_GRILO_MINER (user_data);
|
||||
GFile *cache_file = NULL;
|
||||
g_autoptr(GFile) cache_file = NULL;
|
||||
const gchar *uri;
|
||||
gchar *cache_path = NULL;
|
||||
g_autofree gchar *cache_path = NULL;
|
||||
|
||||
if (error != NULL)
|
||||
{
|
||||
|
@ -129,8 +129,6 @@ searched_online_source (GrlSource *source,
|
|||
self);
|
||||
|
||||
out:
|
||||
g_clear_object (&cache_file);
|
||||
g_free (cache_path);
|
||||
if (remaining == 0)
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
@ -165,7 +163,7 @@ add_online_source_cb (CcBackgroundGriloMiner *self,
|
|||
for (l = self->accounts; l != NULL && !found; l = l->next)
|
||||
{
|
||||
GoaObject *goa_object = GOA_OBJECT (l->data);
|
||||
gchar *account_id;
|
||||
g_autofree gchar *account_id = NULL;
|
||||
|
||||
account_id = get_grilo_id (goa_object);
|
||||
if (g_strcmp0 (source_id, account_id) == 0)
|
||||
|
@ -173,8 +171,6 @@ add_online_source_cb (CcBackgroundGriloMiner *self,
|
|||
query_online_source (self, source);
|
||||
found = TRUE;
|
||||
}
|
||||
|
||||
g_free (account_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -184,7 +180,7 @@ client_async_ready (GObject *source,
|
|||
gpointer user_data)
|
||||
{
|
||||
CcBackgroundGriloMiner *self;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
GList *accounts = NULL;
|
||||
GList *photo_accounts = NULL;
|
||||
GList *l;
|
||||
|
@ -196,7 +192,6 @@ client_async_ready (GObject *source,
|
|||
{
|
||||
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
g_warning ("Failed to create GoaClient: %s", error->message);
|
||||
g_error_free (error);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -227,14 +222,12 @@ client_async_ready (GObject *source,
|
|||
{
|
||||
GoaObject *goa_object = GOA_OBJECT (l->data);
|
||||
GrlSource *source;
|
||||
gchar *account_id;
|
||||
g_autofree gchar *account_id = NULL;
|
||||
|
||||
account_id = get_grilo_id (goa_object);
|
||||
source = grl_registry_lookup_source (registry, account_id);
|
||||
if (source != NULL)
|
||||
query_online_source (self, source);
|
||||
|
||||
g_free (account_id);
|
||||
}
|
||||
|
||||
self->accounts = photo_accounts;
|
||||
|
@ -283,7 +276,7 @@ cc_background_grilo_miner_init (CcBackgroundGriloMiner *self)
|
|||
static void
|
||||
cc_background_grilo_miner_class_init (CcBackgroundGriloMinerClass *klass)
|
||||
{
|
||||
GError *error;
|
||||
g_autoptr(GError) error = NULL;
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GrlRegistry *registry;
|
||||
|
||||
|
@ -306,10 +299,7 @@ cc_background_grilo_miner_class_init (CcBackgroundGriloMinerClass *klass)
|
|||
error = NULL;
|
||||
if (!grl_registry_load_all_plugins (registry, FALSE, &error) ||
|
||||
!grl_registry_activate_plugin_by_id (registry, "grl-flickr", &error))
|
||||
{
|
||||
g_warning ("%s", error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
}
|
||||
|
||||
CcBackgroundGriloMiner *
|
||||
|
|
|
@ -76,8 +76,6 @@ enum {
|
|||
PROP_MODIFIED
|
||||
};
|
||||
|
||||
static void cc_background_item_class_init (CcBackgroundItemClass *klass);
|
||||
static void cc_background_item_init (CcBackgroundItem *background_item);
|
||||
static void cc_background_item_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (CcBackgroundItem, cc_background_item, G_TYPE_OBJECT)
|
||||
|
@ -87,9 +85,6 @@ static GdkPixbuf *slideshow_emblem = NULL;
|
|||
static GdkPixbuf *
|
||||
get_emblemed_pixbuf (CcBackgroundItem *item, GdkPixbuf *pixbuf, gint scale_factor)
|
||||
{
|
||||
GdkPixbuf *retval;
|
||||
GIcon *icon = NULL;
|
||||
GtkIconInfo *icon_info = NULL;
|
||||
int eh;
|
||||
int ew;
|
||||
int h;
|
||||
|
@ -97,12 +92,12 @@ get_emblemed_pixbuf (CcBackgroundItem *item, GdkPixbuf *pixbuf, gint scale_facto
|
|||
int x;
|
||||
int y;
|
||||
|
||||
retval = g_object_ref (pixbuf);
|
||||
|
||||
if (item->slideshow_emblem == NULL) {
|
||||
if (slideshow_emblem == NULL) {
|
||||
GError *error = NULL;
|
||||
g_autoptr(GIcon) icon = NULL;
|
||||
GtkIconTheme *theme;
|
||||
g_autoptr(GtkIconInfo) icon_info = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
icon = g_themed_icon_new ("slideshow-emblem");
|
||||
theme = gtk_icon_theme_get_default ();
|
||||
|
@ -115,14 +110,13 @@ get_emblemed_pixbuf (CcBackgroundItem *item, GdkPixbuf *pixbuf, gint scale_facto
|
|||
if (icon_info == NULL) {
|
||||
g_warning ("Your icon theme is missing the slideshow-emblem icon, "
|
||||
"please file a bug against it");
|
||||
goto out;
|
||||
return g_object_ref (pixbuf);
|
||||
}
|
||||
|
||||
slideshow_emblem = gtk_icon_info_load_icon (icon_info, &error);
|
||||
if (slideshow_emblem == NULL) {
|
||||
g_warning ("Failed to load slideshow emblem: %s", error->message);
|
||||
g_error_free (error);
|
||||
goto out;
|
||||
return g_object_ref (pixbuf);
|
||||
}
|
||||
|
||||
g_object_add_weak_pointer (G_OBJECT (slideshow_emblem), (gpointer *) (&slideshow_emblem));
|
||||
|
@ -141,10 +135,7 @@ get_emblemed_pixbuf (CcBackgroundItem *item, GdkPixbuf *pixbuf, gint scale_facto
|
|||
|
||||
gdk_pixbuf_composite (slideshow_emblem, pixbuf, x, y, ew, eh, x, y, 1.0, 1.0, GDK_INTERP_BILINEAR, 255);
|
||||
|
||||
out:
|
||||
g_clear_object (&icon_info);
|
||||
g_clear_object (&icon);
|
||||
return retval;
|
||||
return g_object_ref (pixbuf);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -154,15 +145,12 @@ set_bg_properties (CcBackgroundItem *item)
|
|||
GdkColor scolor = { 0, 0, 0, 0 };
|
||||
|
||||
if (item->uri) {
|
||||
GFile *file;
|
||||
char *filename;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
file = g_file_new_for_commandline_arg (item->uri);
|
||||
filename = g_file_get_path (file);
|
||||
g_object_unref (file);
|
||||
|
||||
gnome_bg_set_filename (item->bg, filename);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
if (item->primary_color != NULL) {
|
||||
|
@ -233,8 +221,8 @@ cc_background_item_get_frame_thumbnail (CcBackgroundItem *item,
|
|||
int frame,
|
||||
gboolean force_size)
|
||||
{
|
||||
GdkPixbuf *pixbuf = NULL;
|
||||
GdkPixbuf *retval = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
g_autoptr(GdkPixbuf) retval = NULL;
|
||||
|
||||
g_return_val_if_fail (CC_IS_BACKGROUND_ITEM (item), NULL);
|
||||
g_return_val_if_fail (width > 0 && height > 0, NULL);
|
||||
|
@ -271,9 +259,8 @@ cc_background_item_get_frame_thumbnail (CcBackgroundItem *item,
|
|||
&& frame != -2
|
||||
&& gnome_bg_changes_with_time (item->bg)) {
|
||||
retval = get_emblemed_pixbuf (item, pixbuf, scale_factor);
|
||||
g_object_unref (pixbuf);
|
||||
} else {
|
||||
retval = pixbuf;
|
||||
retval = g_steal_pointer (&pixbuf);
|
||||
}
|
||||
|
||||
gnome_bg_get_image_size (item->bg,
|
||||
|
@ -285,7 +272,7 @@ cc_background_item_get_frame_thumbnail (CcBackgroundItem *item,
|
|||
|
||||
update_size (item);
|
||||
|
||||
return retval;
|
||||
return g_steal_pointer (&retval);
|
||||
}
|
||||
|
||||
|
||||
|
@ -303,10 +290,11 @@ static void
|
|||
update_info (CcBackgroundItem *item,
|
||||
GFileInfo *_info)
|
||||
{
|
||||
GFile *file;
|
||||
GFileInfo *info;
|
||||
g_autoptr(GFileInfo) info = NULL;
|
||||
|
||||
if (_info == NULL) {
|
||||
g_autoptr(GFile) file = NULL;
|
||||
|
||||
file = g_file_new_for_uri (item->uri);
|
||||
|
||||
info = g_file_query_info (file,
|
||||
|
@ -318,7 +306,6 @@ update_info (CcBackgroundItem *item,
|
|||
G_FILE_QUERY_INFO_NONE,
|
||||
NULL,
|
||||
NULL);
|
||||
g_object_unref (file);
|
||||
} else {
|
||||
info = g_object_ref (_info);
|
||||
}
|
||||
|
@ -338,11 +325,8 @@ update_info (CcBackgroundItem *item,
|
|||
|
||||
item->mime_type = g_strdup (g_file_info_get_content_type (info));
|
||||
if (item->modified == 0)
|
||||
item->modified = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
|
||||
item->modified = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
|
||||
}
|
||||
|
||||
if (info != NULL)
|
||||
g_object_unref (info);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -367,13 +351,12 @@ cc_background_item_load (CcBackgroundItem *item,
|
|||
/* FIXME we should handle XML files as well */
|
||||
if (item->mime_type != NULL &&
|
||||
g_str_has_prefix (item->mime_type, "image/")) {
|
||||
char *filename;
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
filename = g_filename_from_uri (item->uri, NULL, NULL);
|
||||
gdk_pixbuf_get_file_info (filename,
|
||||
&item->width,
|
||||
&item->height);
|
||||
g_free (filename);
|
||||
update_size (item);
|
||||
}
|
||||
|
||||
|
@ -689,8 +672,8 @@ cc_background_item_constructor (GType type,
|
|||
CcBackgroundItem *background_item;
|
||||
|
||||
background_item = CC_BACKGROUND_ITEM (G_OBJECT_CLASS (cc_background_item_parent_class)->constructor (type,
|
||||
n_construct_properties,
|
||||
construct_properties));
|
||||
n_construct_properties,
|
||||
construct_properties));
|
||||
|
||||
return G_OBJECT (background_item);
|
||||
}
|
||||
|
@ -919,7 +902,7 @@ enum_to_str (GType type,
|
|||
void
|
||||
cc_background_item_dump (CcBackgroundItem *item)
|
||||
{
|
||||
GString *flags;
|
||||
g_autoptr(GString) flags = NULL;
|
||||
int i;
|
||||
|
||||
g_return_if_fail (CC_IS_BACKGROUND_ITEM (item));
|
||||
|
@ -938,7 +921,6 @@ cc_background_item_dump (CcBackgroundItem *item)
|
|||
if (flags->len == 0)
|
||||
g_string_append (flags, "-none-");
|
||||
g_debug ("flags:\t\t\t%s", flags->str);
|
||||
g_string_free (flags, TRUE);
|
||||
if (item->primary_color)
|
||||
g_debug ("pcolor:\t\t\t%s", item->primary_color);
|
||||
if (item->secondary_color)
|
||||
|
@ -961,7 +943,8 @@ static gboolean
|
|||
files_equal (const char *a,
|
||||
const char *b)
|
||||
{
|
||||
GFile *file1, *file2;
|
||||
g_autoptr(GFile) file1 = NULL;
|
||||
g_autoptr(GFile) file2 = NULL;
|
||||
gboolean retval;
|
||||
|
||||
if (a == NULL &&
|
||||
|
@ -978,8 +961,6 @@ files_equal (const char *a,
|
|||
retval = FALSE;
|
||||
else
|
||||
retval = TRUE;
|
||||
g_object_unref (file1);
|
||||
g_object_unref (file2);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -68,8 +68,6 @@ struct _CcBackgroundPanel
|
|||
CC_PANEL_REGISTER (CcBackgroundPanel, cc_background_panel)
|
||||
|
||||
#define WID(y) (GtkWidget *) gtk_builder_get_object (panel->builder, y)
|
||||
#define CURRENT_BG (settings == panel->settings ? panel->current_background : panel->current_lock_background)
|
||||
#define SAVE_PATH (settings == panel->settings ? "last-edited.xml" : "last-edited-lock.xml")
|
||||
|
||||
static const char *
|
||||
cc_background_panel_get_help_uri (CcPanel *panel)
|
||||
|
@ -132,6 +130,15 @@ cc_background_panel_class_init (CcBackgroundPanelClass *klass)
|
|||
object_class->finalize = cc_background_panel_finalize;
|
||||
}
|
||||
|
||||
static CcBackgroundItem *
|
||||
get_current_background (CcBackgroundPanel *panel, GSettings *settings)
|
||||
{
|
||||
if (settings == panel->settings)
|
||||
return panel->current_background;
|
||||
else
|
||||
return panel->current_lock_background;
|
||||
}
|
||||
|
||||
static void
|
||||
update_preview (CcBackgroundPanel *panel,
|
||||
GSettings *settings,
|
||||
|
@ -140,7 +147,7 @@ update_preview (CcBackgroundPanel *panel,
|
|||
gboolean changes_with_time;
|
||||
CcBackgroundItem *current_background;
|
||||
|
||||
current_background = CURRENT_BG;
|
||||
current_background = get_current_background (panel, settings);
|
||||
|
||||
if (item && current_background)
|
||||
{
|
||||
|
@ -176,13 +183,13 @@ update_preview (CcBackgroundPanel *panel,
|
|||
}
|
||||
}
|
||||
|
||||
static char *
|
||||
get_save_path (const char *filename)
|
||||
static gchar *
|
||||
get_save_path (CcBackgroundPanel *panel, GSettings *settings)
|
||||
{
|
||||
return g_build_filename (g_get_user_config_dir (),
|
||||
"gnome-control-center",
|
||||
"backgrounds",
|
||||
filename,
|
||||
settings == panel->settings ? "last-edited.xml" : "last-edited-lock.xml",
|
||||
NULL);
|
||||
}
|
||||
|
||||
|
@ -210,6 +217,7 @@ get_or_create_cached_pixbuf (CcBackgroundPanel *panel,
|
|||
-2, TRUE);
|
||||
g_object_set_data_full (G_OBJECT (background), "pixbuf", pixbuf, g_object_unref);
|
||||
}
|
||||
|
||||
return pixbuf;
|
||||
}
|
||||
|
||||
|
@ -254,13 +262,15 @@ static void
|
|||
reload_current_bg (CcBackgroundPanel *panel,
|
||||
GSettings *settings)
|
||||
{
|
||||
CcBackgroundItem *saved, *configured;
|
||||
gchar *uri, *pcolor, *scolor;
|
||||
g_autoptr(CcBackgroundItem) saved = NULL;
|
||||
CcBackgroundItem *configured;
|
||||
g_autofree gchar *uri = NULL;
|
||||
g_autofree gchar *pcolor = NULL;
|
||||
g_autofree gchar *scolor = NULL;
|
||||
|
||||
/* Load the saved configuration */
|
||||
uri = get_save_path (SAVE_PATH);
|
||||
uri = get_save_path (panel, settings);
|
||||
saved = cc_background_xml_get_item (uri);
|
||||
g_free (uri);
|
||||
|
||||
/* initalise the current background information from settings */
|
||||
uri = g_settings_get_string (settings, WP_URI_KEY);
|
||||
|
@ -270,13 +280,10 @@ reload_current_bg (CcBackgroundPanel *panel,
|
|||
}
|
||||
else
|
||||
{
|
||||
GFile *file;
|
||||
|
||||
g_autoptr(GFile) file = NULL;
|
||||
file = g_file_new_for_commandline_arg (uri);
|
||||
g_object_unref (file);
|
||||
}
|
||||
configured = cc_background_item_new (uri);
|
||||
g_free (uri);
|
||||
|
||||
pcolor = g_settings_get_string (settings, WP_PCOLOR_KEY);
|
||||
scolor = g_settings_get_string (settings, WP_SCOLOR_KEY);
|
||||
|
@ -287,8 +294,6 @@ reload_current_bg (CcBackgroundPanel *panel,
|
|||
"primary-color", pcolor,
|
||||
"secondary-color", scolor,
|
||||
NULL);
|
||||
g_free (pcolor);
|
||||
g_free (scolor);
|
||||
|
||||
if (saved != NULL && cc_background_item_compare (saved, configured))
|
||||
{
|
||||
|
@ -304,8 +309,6 @@ reload_current_bg (CcBackgroundPanel *panel,
|
|||
"source-xml", cc_background_item_get_source_xml (saved),
|
||||
NULL);
|
||||
}
|
||||
if (saved != NULL)
|
||||
g_object_unref (saved);
|
||||
|
||||
if (settings == panel->settings)
|
||||
{
|
||||
|
@ -323,7 +326,7 @@ reload_current_bg (CcBackgroundPanel *panel,
|
|||
static gboolean
|
||||
create_save_dir (void)
|
||||
{
|
||||
char *path;
|
||||
g_autofree char *path = NULL;
|
||||
|
||||
path = g_build_filename (g_get_user_config_dir (),
|
||||
"gnome-control-center",
|
||||
|
@ -332,10 +335,8 @@ create_save_dir (void)
|
|||
if (g_mkdir_with_parents (path, USER_DIR_MODE) < 0)
|
||||
{
|
||||
g_warning ("Failed to create directory '%s'", path);
|
||||
g_free (path);
|
||||
return FALSE;
|
||||
}
|
||||
g_free (path);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -344,8 +345,8 @@ copy_finished_cb (GObject *source_object,
|
|||
GAsyncResult *result,
|
||||
gpointer pointer)
|
||||
{
|
||||
GError *err = NULL;
|
||||
CcBackgroundPanel *panel = (CcBackgroundPanel *) pointer;
|
||||
g_autoptr(GError) err = NULL;
|
||||
g_autoptr(CcBackgroundPanel) panel = (CcBackgroundPanel *) pointer;
|
||||
CcBackgroundItem *item;
|
||||
CcBackgroundItem *current_background;
|
||||
GSettings *settings;
|
||||
|
@ -353,15 +354,13 @@ copy_finished_cb (GObject *source_object,
|
|||
if (!g_file_copy_finish (G_FILE (source_object), result, &err))
|
||||
{
|
||||
if (g_error_matches (err, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
|
||||
g_error_free (err);
|
||||
return;
|
||||
}
|
||||
g_warning ("Failed to copy image to cache location: %s", err->message);
|
||||
g_error_free (err);
|
||||
}
|
||||
item = g_object_get_data (source_object, "item");
|
||||
settings = g_object_get_data (source_object, "settings");
|
||||
current_background = CURRENT_BG;
|
||||
current_background = get_current_background (panel, settings);
|
||||
|
||||
g_settings_apply (settings);
|
||||
|
||||
|
@ -379,19 +378,16 @@ copy_finished_cb (GObject *source_object,
|
|||
|
||||
if (panel->builder)
|
||||
{
|
||||
char *filename;
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
update_preview (panel, settings, item);
|
||||
current_background = CURRENT_BG;
|
||||
current_background = get_current_background (panel, settings);
|
||||
|
||||
/* Save the source XML if there is one */
|
||||
filename = get_save_path (SAVE_PATH);
|
||||
filename = get_save_path (panel, settings);
|
||||
if (create_save_dir ())
|
||||
cc_background_xml_save (current_background, filename);
|
||||
}
|
||||
|
||||
/* remove the reference taken when the copy was set up */
|
||||
g_object_unref (panel);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -403,7 +399,6 @@ set_background (CcBackgroundPanel *panel,
|
|||
gboolean save_settings = TRUE;
|
||||
const char *uri;
|
||||
CcBackgroundItemFlags flags;
|
||||
char *filename;
|
||||
|
||||
if (item == NULL)
|
||||
return;
|
||||
|
@ -419,34 +414,33 @@ set_background (CcBackgroundPanel *panel,
|
|||
else if (cc_background_item_get_source_url (item) != NULL &&
|
||||
cc_background_item_get_needs_download (item))
|
||||
{
|
||||
GFile *source, *dest;
|
||||
char *cache_path, *basename, *dest_path, *display_name, *dest_uri;
|
||||
GdkPixbuf *pixbuf;
|
||||
g_autoptr(GFile) source = NULL;
|
||||
g_autoptr(GFile) dest = NULL;
|
||||
g_autofree gchar *cache_path = NULL;
|
||||
g_autofree gchar *basename = NULL;
|
||||
g_autofree gchar *display_name = NULL;
|
||||
g_autofree gchar *dest_path = NULL;
|
||||
g_autofree gchar *dest_uri = NULL;
|
||||
g_autoptr(GdkPixbuf) pixbuf = NULL;
|
||||
|
||||
cache_path = bg_pictures_source_get_cache_path ();
|
||||
if (g_mkdir_with_parents (cache_path, USER_DIR_MODE) < 0)
|
||||
{
|
||||
g_warning ("Failed to create directory '%s'", cache_path);
|
||||
g_free (cache_path);
|
||||
return;
|
||||
}
|
||||
g_free (cache_path);
|
||||
|
||||
dest_path = bg_pictures_source_get_unique_path (cc_background_item_get_source_url (item));
|
||||
dest = g_file_new_for_path (dest_path);
|
||||
g_free (dest_path);
|
||||
source = g_file_new_for_uri (cc_background_item_get_source_url (item));
|
||||
basename = g_file_get_basename (source);
|
||||
display_name = g_filename_display_name (basename);
|
||||
dest_path = g_file_get_path (dest);
|
||||
g_free (basename);
|
||||
|
||||
/* create a blank image to use until the source image is ready */
|
||||
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, 1, 1);
|
||||
gdk_pixbuf_fill (pixbuf, 0x00000000);
|
||||
gdk_pixbuf_save (pixbuf, dest_path, "png", NULL, NULL);
|
||||
g_object_unref (pixbuf);
|
||||
g_free (dest_path);
|
||||
|
||||
if (panel->copy_cancellable)
|
||||
{
|
||||
|
@ -476,9 +470,7 @@ set_background (CcBackgroundPanel *panel,
|
|||
G_PRIORITY_DEFAULT, panel->copy_cancellable,
|
||||
NULL, NULL,
|
||||
copy_finished_cb, panel);
|
||||
g_object_unref (source);
|
||||
dest_uri = g_file_get_uri (dest);
|
||||
g_object_unref (dest);
|
||||
|
||||
g_settings_set_string (settings, WP_URI_KEY, dest_uri);
|
||||
g_object_set (G_OBJECT (item),
|
||||
|
@ -486,8 +478,6 @@ set_background (CcBackgroundPanel *panel,
|
|||
"needs-download", FALSE,
|
||||
"name", display_name,
|
||||
NULL);
|
||||
g_free (display_name);
|
||||
g_free (dest_uri);
|
||||
|
||||
/* delay the updated drawing of the preview until the copy finishes */
|
||||
save_settings = FALSE;
|
||||
|
@ -518,31 +508,30 @@ set_background (CcBackgroundPanel *panel,
|
|||
/* update the preview information */
|
||||
if (save_settings != FALSE)
|
||||
{
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
/* Apply all changes */
|
||||
g_settings_apply (settings);
|
||||
|
||||
/* Save the source XML if there is one */
|
||||
filename = get_save_path (SAVE_PATH);
|
||||
filename = get_save_path (panel, settings);
|
||||
if (create_save_dir ())
|
||||
cc_background_xml_save (CURRENT_BG, filename);
|
||||
cc_background_xml_save (get_current_background (panel, settings), filename);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_chooser_dialog_response (GtkDialog *dialog,
|
||||
int response_id,
|
||||
CcBackgroundPanel *self)
|
||||
CcBackgroundPanel *panel)
|
||||
{
|
||||
if (response_id == GTK_RESPONSE_OK)
|
||||
{
|
||||
CcBackgroundItem *item;
|
||||
g_autoptr(CcBackgroundItem) item = NULL;
|
||||
|
||||
item = cc_background_chooser_dialog_get_item (CC_BACKGROUND_CHOOSER_DIALOG (dialog));
|
||||
if (item != NULL)
|
||||
{
|
||||
set_background (self, g_object_get_data (G_OBJECT (dialog), "settings"), item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
set_background (panel, g_object_get_data (G_OBJECT (dialog), "settings"), item);
|
||||
}
|
||||
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
|
@ -564,32 +553,32 @@ launch_chooser (CcBackgroundPanel *panel,
|
|||
|
||||
static void
|
||||
on_background_button_clicked (GtkButton *button,
|
||||
CcBackgroundPanel *self)
|
||||
CcBackgroundPanel *panel)
|
||||
{
|
||||
launch_chooser (self, self->settings);
|
||||
launch_chooser (panel, panel->settings);
|
||||
}
|
||||
|
||||
static void
|
||||
on_lock_button_clicked (GtkButton *button,
|
||||
CcBackgroundPanel *self)
|
||||
CcBackgroundPanel *panel)
|
||||
{
|
||||
launch_chooser (self, self->lock_settings);
|
||||
launch_chooser (panel, panel->lock_settings);
|
||||
}
|
||||
|
||||
static void
|
||||
on_settings_changed (GSettings *settings,
|
||||
gchar *key,
|
||||
CcBackgroundPanel *self)
|
||||
CcBackgroundPanel *panel)
|
||||
{
|
||||
reload_current_bg (self, settings);
|
||||
update_preview (self, settings, NULL);
|
||||
reload_current_bg (panel, settings);
|
||||
update_preview (panel, settings, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_background_panel_init (CcBackgroundPanel *panel)
|
||||
{
|
||||
gchar *objects[] = {"background-panel", NULL };
|
||||
GError *err = NULL;
|
||||
g_autoptr(GError) err = NULL;
|
||||
GtkWidget *widget;
|
||||
|
||||
panel->connection = g_application_get_dbus_connection (g_application_get_default ());
|
||||
|
@ -603,7 +592,6 @@ cc_background_panel_init (CcBackgroundPanel *panel)
|
|||
if (err)
|
||||
{
|
||||
g_warning ("Could not load ui: %s", err->message);
|
||||
g_error_free (err);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -50,17 +50,13 @@ enum {
|
|||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
static void cc_background_xml_class_init (CcBackgroundXmlClass *klass);
|
||||
static void cc_background_xml_init (CcBackgroundXml *background_item);
|
||||
static void cc_background_xml_finalize (GObject *object);
|
||||
|
||||
G_DEFINE_TYPE (CcBackgroundXml, cc_background_xml, G_TYPE_OBJECT)
|
||||
|
||||
static gboolean
|
||||
cc_background_xml_get_bool (const xmlNode *parent,
|
||||
const gchar *prop_name)
|
||||
{
|
||||
xmlChar * prop;
|
||||
xmlChar *prop;
|
||||
gboolean ret_val = FALSE;
|
||||
|
||||
g_return_val_if_fail (parent != NULL, FALSE);
|
||||
|
@ -73,7 +69,7 @@ cc_background_xml_get_bool (const xmlNode *parent,
|
|||
} else {
|
||||
ret_val = FALSE;
|
||||
}
|
||||
g_free (prop);
|
||||
xmlFree (prop);
|
||||
}
|
||||
|
||||
return ret_val;
|
||||
|
@ -115,15 +111,17 @@ enum_string_to_value (GType type,
|
|||
static gboolean
|
||||
idle_emit (CcBackgroundXml *xml)
|
||||
{
|
||||
GObject *item;
|
||||
guint i = NUM_ITEMS_PER_BATCH;
|
||||
gint i;
|
||||
|
||||
g_async_queue_lock (xml->item_added_queue);
|
||||
|
||||
while (i > 0 && (item = g_async_queue_try_pop_unlocked (xml->item_added_queue)) != NULL) {
|
||||
for (i = 0; i < NUM_ITEMS_PER_BATCH; i++) {
|
||||
g_autoptr(GObject) item = NULL;
|
||||
|
||||
item = g_async_queue_try_pop_unlocked (xml->item_added_queue);
|
||||
if (item == NULL)
|
||||
break;
|
||||
g_signal_emit (G_OBJECT (xml), signals[ADDED], 0, item);
|
||||
g_object_unref (item);
|
||||
i--;
|
||||
}
|
||||
|
||||
g_async_queue_unlock (xml->item_added_queue);
|
||||
|
@ -175,12 +173,13 @@ cc_background_xml_load_xml_internal (CcBackgroundXml *xml,
|
|||
|
||||
for (list = root->children; list != NULL; list = list->next) {
|
||||
if (!strcmp ((gchar *)list->name, "wallpaper")) {
|
||||
CcBackgroundItem * item;
|
||||
g_autoptr(CcBackgroundItem) item = NULL;
|
||||
CcBackgroundItemFlags flags;
|
||||
char *uri, *cname, *id;
|
||||
g_autofree gchar *uri = NULL;
|
||||
g_autofree gchar *cname = NULL;
|
||||
g_autofree gchar *id = NULL;
|
||||
|
||||
flags = 0;
|
||||
cname = NULL;
|
||||
item = cc_background_item_new (NULL);
|
||||
|
||||
g_object_set (G_OBJECT (item),
|
||||
|
@ -194,26 +193,24 @@ cc_background_xml_load_xml_internal (CcBackgroundXml *xml,
|
|||
} else if (!strcmp ((gchar *)wpa->name, "filename")) {
|
||||
if (wpa->last != NULL && wpa->last->content != NULL) {
|
||||
gchar *content = g_strstrip ((gchar *)wpa->last->content);
|
||||
char *bg_uri;
|
||||
g_autofree gchar *bg_uri = NULL;
|
||||
|
||||
/* FIXME same rubbish as in other parts of the code */
|
||||
if (strcmp (content, NONE) == 0) {
|
||||
bg_uri = NULL;
|
||||
} else {
|
||||
GFile *file;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
file = g_file_new_for_commandline_arg (content);
|
||||
bg_uri = g_file_get_uri (file);
|
||||
g_object_unref (file);
|
||||
}
|
||||
SET_FLAG(CC_BACKGROUND_ITEM_HAS_URI);
|
||||
g_object_set (G_OBJECT (item), "uri", bg_uri, NULL);
|
||||
g_free (bg_uri);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else if (!strcmp ((gchar *)wpa->name, "name")) {
|
||||
if (wpa->last != NULL && wpa->last->content != NULL) {
|
||||
char *name;
|
||||
g_autofree gchar *name = NULL;
|
||||
nodelang = xmlNodeGetLang (wpa->last);
|
||||
|
||||
g_object_get (G_OBJECT (item), "name", &name, NULL);
|
||||
|
@ -232,7 +229,6 @@ cc_background_xml_load_xml_internal (CcBackgroundXml *xml,
|
|||
}
|
||||
}
|
||||
|
||||
g_free (name);
|
||||
xmlFree (nodelang);
|
||||
} else {
|
||||
break;
|
||||
|
@ -279,21 +275,20 @@ cc_background_xml_load_xml_internal (CcBackgroundXml *xml,
|
|||
|
||||
/* Check whether the target file exists */
|
||||
{
|
||||
GFile *file;
|
||||
const char *uri;
|
||||
|
||||
uri = cc_background_item_get_uri (item);
|
||||
if (uri != NULL)
|
||||
{
|
||||
g_autoptr(GFile) file = NULL;
|
||||
|
||||
file = g_file_new_for_uri (uri);
|
||||
if (g_file_query_exists (file, NULL) == FALSE)
|
||||
{
|
||||
g_free (cname);
|
||||
g_object_unref (file);
|
||||
g_object_unref (item);
|
||||
g_clear_pointer (&cname, g_free);
|
||||
g_clear_object (&item);
|
||||
continue;
|
||||
}
|
||||
g_object_unref (file);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -301,13 +296,9 @@ cc_background_xml_load_xml_internal (CcBackgroundXml *xml,
|
|||
* need to use proper code here */
|
||||
uri = g_filename_to_uri (filename, NULL, NULL);
|
||||
id = g_strdup_printf ("%s#%s", uri, cname);
|
||||
g_free (cname);
|
||||
g_free (uri);
|
||||
|
||||
/* Make sure we don't already have this one and that filename exists */
|
||||
if (g_hash_table_lookup (xml->wp_hash, id) != NULL) {
|
||||
g_object_unref (item);
|
||||
g_free (id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -319,9 +310,6 @@ cc_background_xml_load_xml_internal (CcBackgroundXml *xml,
|
|||
emit_added_in_idle (xml, g_object_ref (item));
|
||||
else
|
||||
g_signal_emit (G_OBJECT (xml), signals[ADDED], 0, item);
|
||||
|
||||
g_object_unref (item);
|
||||
g_free (id);
|
||||
retval = TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -337,14 +325,13 @@ gnome_wp_file_changed (GFileMonitor *monitor,
|
|||
GFileMonitorEvent event_type,
|
||||
CcBackgroundXml *data)
|
||||
{
|
||||
gchar *filename;
|
||||
g_autofree gchar *filename = NULL;
|
||||
|
||||
switch (event_type) {
|
||||
case G_FILE_MONITOR_EVENT_CHANGED:
|
||||
case G_FILE_MONITOR_EVENT_CREATED:
|
||||
filename = g_file_get_path (file);
|
||||
cc_background_xml_load_xml_internal (data, filename, FALSE);
|
||||
g_free (filename);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -356,20 +343,18 @@ cc_background_xml_add_monitor (GFile *directory,
|
|||
CcBackgroundXml *data)
|
||||
{
|
||||
GFileMonitor *monitor;
|
||||
GError *error = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
monitor = g_file_monitor_directory (directory,
|
||||
G_FILE_MONITOR_NONE,
|
||||
NULL,
|
||||
&error);
|
||||
if (error != NULL) {
|
||||
gchar *path;
|
||||
g_autofree gchar *path = NULL;
|
||||
|
||||
path = g_file_get_parse_name (directory);
|
||||
g_warning ("Unable to monitor directory %s: %s",
|
||||
path, error->message);
|
||||
g_error_free (error);
|
||||
g_free (path);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -385,10 +370,9 @@ cc_background_xml_load_from_dir (const gchar *path,
|
|||
CcBackgroundXml *data,
|
||||
gboolean in_thread)
|
||||
{
|
||||
GFile *directory;
|
||||
GFileEnumerator *enumerator;
|
||||
GError *error = NULL;
|
||||
GFileInfo *info;
|
||||
g_autoptr(GFile) directory = NULL;
|
||||
g_autoptr(GFileEnumerator) enumerator = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
if (!g_file_test (path, G_FILE_TEST_IS_DIR)) {
|
||||
return;
|
||||
|
@ -402,28 +386,26 @@ cc_background_xml_load_from_dir (const gchar *path,
|
|||
&error);
|
||||
if (error != NULL) {
|
||||
g_warning ("Unable to check directory %s: %s", path, error->message);
|
||||
g_error_free (error);
|
||||
g_object_unref (directory);
|
||||
return;
|
||||
}
|
||||
|
||||
while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL))) {
|
||||
while (TRUE) {
|
||||
g_autoptr(GFileInfo) info = NULL;
|
||||
const gchar *filename;
|
||||
gchar *fullpath;
|
||||
g_autofree gchar *fullpath = NULL;
|
||||
|
||||
info = g_file_enumerator_next_file (enumerator, NULL, NULL);
|
||||
if (info == NULL) {
|
||||
g_file_enumerator_close (enumerator, NULL, NULL);
|
||||
cc_background_xml_add_monitor (directory, data);
|
||||
return;
|
||||
}
|
||||
|
||||
filename = g_file_info_get_name (info);
|
||||
fullpath = g_build_filename (path, filename, NULL);
|
||||
g_object_unref (info);
|
||||
|
||||
cc_background_xml_load_xml_internal (data, fullpath, in_thread);
|
||||
g_free (fullpath);
|
||||
}
|
||||
g_file_enumerator_close (enumerator, NULL, NULL);
|
||||
|
||||
cc_background_xml_add_monitor (directory, data);
|
||||
|
||||
g_object_unref (directory);
|
||||
g_object_unref (enumerator);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -431,22 +413,21 @@ cc_background_xml_load_list (CcBackgroundXml *data,
|
|||
gboolean in_thread)
|
||||
{
|
||||
const char * const *system_data_dirs;
|
||||
gchar * datadir;
|
||||
g_autofree gchar *datadir = NULL;
|
||||
gint i;
|
||||
|
||||
datadir = g_build_filename (g_get_user_data_dir (),
|
||||
"gnome-background-properties",
|
||||
NULL);
|
||||
cc_background_xml_load_from_dir (datadir, data, in_thread);
|
||||
g_free (datadir);
|
||||
|
||||
system_data_dirs = g_get_system_data_dirs ();
|
||||
for (i = 0; system_data_dirs[i]; i++) {
|
||||
datadir = g_build_filename (system_data_dirs[i],
|
||||
g_autofree gchar *sdatadir = NULL;
|
||||
sdatadir = g_build_filename (system_data_dirs[i],
|
||||
"gnome-background-properties",
|
||||
NULL);
|
||||
cc_background_xml_load_from_dir (datadir, data, in_thread);
|
||||
g_free (datadir);
|
||||
cc_background_xml_load_from_dir (sdatadir, data, in_thread);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -479,14 +460,13 @@ void cc_background_xml_load_list_async (CcBackgroundXml *xml,
|
|||
GAsyncReadyCallback callback,
|
||||
gpointer user_data)
|
||||
{
|
||||
GSimpleAsyncResult *result;
|
||||
g_autoptr(GSimpleAsyncResult) result = NULL;
|
||||
|
||||
g_return_if_fail (CC_IS_BACKGROUND_XML (xml));
|
||||
|
||||
result = g_simple_async_result_new (G_OBJECT (xml), callback, user_data, cc_background_xml_load_list_async);
|
||||
g_simple_async_result_set_op_res_gpointer (result, xml, NULL);
|
||||
g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) load_list_thread, G_PRIORITY_LOW, cancellable);
|
||||
g_object_unref (result);
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -513,20 +493,17 @@ single_xml_added (CcBackgroundXml *xml,
|
|||
CcBackgroundItem *
|
||||
cc_background_xml_get_item (const char *filename)
|
||||
{
|
||||
CcBackgroundXml *xml;
|
||||
CcBackgroundItem *item;
|
||||
g_autoptr(CcBackgroundXml) xml = NULL;
|
||||
CcBackgroundItem *item = NULL;
|
||||
|
||||
if (g_file_test (filename, G_FILE_TEST_IS_REGULAR) == FALSE)
|
||||
return NULL;
|
||||
|
||||
xml = cc_background_xml_new ();
|
||||
item = NULL;
|
||||
g_signal_connect (G_OBJECT (xml), "added",
|
||||
G_CALLBACK (single_xml_added), &item);
|
||||
if (cc_background_xml_load_xml (xml, filename) == FALSE) {
|
||||
g_object_unref (xml);
|
||||
if (cc_background_xml_load_xml (xml, filename) == FALSE)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
@ -555,7 +532,11 @@ cc_background_xml_save (CcBackgroundItem *item,
|
|||
xmlNode *xml_item G_GNUC_UNUSED;
|
||||
const char * none = "(none)";
|
||||
const char *placement_str, *shading_str;
|
||||
char *name, *pcolor, *scolor, *uri, *source_url;
|
||||
g_autofree gchar *name = NULL;
|
||||
g_autofree gchar *pcolor = NULL;
|
||||
g_autofree gchar *scolor = NULL;
|
||||
g_autofree gchar *uri = NULL;
|
||||
g_autofree gchar *source_url = NULL;
|
||||
CcBackgroundItemFlags flags;
|
||||
GDesktopBackgroundStyle placement;
|
||||
GDesktopBackgroundShading shading;
|
||||
|
@ -586,14 +567,12 @@ cc_background_xml_save (CcBackgroundItem *item,
|
|||
if (flags & CC_BACKGROUND_ITEM_HAS_URI &&
|
||||
uri != NULL)
|
||||
{
|
||||
GFile *file;
|
||||
char *fname;
|
||||
g_autoptr(GFile) file = NULL;
|
||||
g_autofree gchar *fname = NULL;
|
||||
|
||||
file = g_file_new_for_commandline_arg (uri);
|
||||
fname = g_file_get_path (file);
|
||||
g_object_unref (file);
|
||||
xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"filename", (xmlChar *)fname);
|
||||
g_free (fname);
|
||||
}
|
||||
else if (flags & CC_BACKGROUND_ITEM_HAS_URI)
|
||||
{
|
||||
|
@ -611,12 +590,6 @@ cc_background_xml_save (CcBackgroundItem *item,
|
|||
if (source_url != NULL)
|
||||
xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"source_url", (xmlChar *)source_url);
|
||||
|
||||
g_free (name);
|
||||
g_free (pcolor);
|
||||
g_free (scolor);
|
||||
g_free (uri);
|
||||
g_free (source_url);
|
||||
|
||||
xmlSaveFormatFile (filename, wp, 1);
|
||||
xmlFreeDoc (wp);
|
||||
}
|
||||
|
@ -661,9 +634,9 @@ static void
|
|||
cc_background_xml_init (CcBackgroundXml *xml)
|
||||
{
|
||||
xml->wp_hash = g_hash_table_new_full (g_str_hash,
|
||||
g_str_equal,
|
||||
(GDestroyNotify) g_free,
|
||||
(GDestroyNotify) g_object_unref);
|
||||
g_str_equal,
|
||||
(GDestroyNotify) g_free,
|
||||
(GDestroyNotify) g_object_unref);
|
||||
xml->item_added_queue = g_async_queue_new_full ((GDestroyNotify) g_object_unref);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,11 +8,10 @@ on_dialog_response (GtkDialog *dialog,
|
|||
{
|
||||
g_debug ("response: %d", response_id);
|
||||
if (response_id == GTK_RESPONSE_OK) {
|
||||
CcBackgroundItem *item;
|
||||
g_autoptr(CcBackgroundItem) item = NULL;
|
||||
|
||||
item = cc_background_chooser_dialog_get_item (CC_BACKGROUND_CHOOSER_DIALOG (dialog));
|
||||
cc_background_item_dump (item);
|
||||
g_object_unref (item);
|
||||
}
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
gtk_main_quit ();
|
||||
|
|
Loading…
Add table
Reference in a new issue