[gnome-control-center] background: Implement saving a single item
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] background: Implement saving a single item
- Date: Mon, 14 Feb 2011 09:45:02 +0000 (UTC)
commit ecdcb2c23592f87fb165c4d227a4c6579eb927ff
Author: Bastien Nocera <hadess hadess net>
Date: Mon Feb 14 09:38:50 2011 +0000
background: Implement saving a single item
panels/background/cc-background-xml.c | 155 ++++++++++++++++-----------------
panels/background/cc-background-xml.h | 3 +-
2 files changed, 78 insertions(+), 80 deletions(-)
---
diff --git a/panels/background/cc-background-xml.c b/panels/background/cc-background-xml.c
index 5ba155c..9e5b847 100644
--- a/panels/background/cc-background-xml.c
+++ b/panels/background/cc-background-xml.c
@@ -79,20 +79,6 @@ cc_background_xml_get_bool (const xmlNode *parent,
return ret_val;
}
-#if 0
-static void cc_background_xml_set_bool (const xmlNode * parent,
- const xmlChar * prop_name, gboolean value) {
- g_return_if_fail (parent != NULL);
- g_return_if_fail (prop_name != NULL);
-
- if (value) {
- xmlSetProp ((xmlNode *) parent, prop_name, (xmlChar *)"true");
- } else {
- xmlSetProp ((xmlNode *) parent, prop_name, (xmlChar *)"false");
- }
-}
-#endif
-
static struct {
int value;
const char *string;
@@ -501,79 +487,90 @@ cc_background_xml_get_item (const char *filename)
return item;
}
-#if 0
-static void gnome_wp_list_flatten (const gchar * key, CcBackgroundXml * item,
- GSList ** list) {
- g_return_if_fail (key != NULL);
- g_return_if_fail (item != NULL);
+static const char *
+enum_to_str (GType type,
+ int v)
+{
+ GEnumClass *eclass;
+ GEnumValue *value;
- *list = g_slist_prepend (*list, item);
-}
-#endif
-void cc_background_xml_save_list (CcBackgroundXml *data) {
- //FIXME implement save or remove?
- //FIXME use XDG user dirs
-#if 0
- xmlDoc * wplist;
- xmlNode * root, * wallpaper, * item;
- GSList * list = NULL;
- gchar * wpfile;
+ eclass = G_ENUM_CLASS (g_type_class_peek (type));
+ value = g_enum_get_value (eclass, v);
- g_hash_table_foreach (data->wp_hash,
- (GHFunc) gnome_wp_list_flatten, &list);
- g_hash_table_destroy (data->wp_hash);
- list = g_slist_reverse (list);
+ g_assert (value);
- wpfile = g_build_filename (g_get_home_dir (),
- "/.gnome2",
- "backgrounds.xml",
- NULL);
+ return value->value_nick;
+}
+
+void
+cc_background_xml_save (CcBackgroundItem *item,
+ const char *filename)
+{
+ xmlDoc *wp;
+ xmlNode *root, *wallpaper;
+ xmlNode *xml_item G_GNUC_UNUSED;
+ const char * none = "(none)";
+ const char *placement_str, *shading_str;
+ char *name, *pcolor, *scolor, *uri;
+ CcBackgroundItemFlags flags;
+ GDesktopBackgroundStyle placement;
+ GDesktopBackgroundShading shading;
xmlKeepBlanksDefault (0);
- wplist = xmlNewDoc ((xmlChar *)"1.0");
- xmlCreateIntSubset (wplist, (xmlChar *)"wallpapers", NULL, (xmlChar *)"gnome-wp-list.dtd");
+ wp = xmlNewDoc ((xmlChar *)"1.0");
+ xmlCreateIntSubset (wp, (xmlChar *)"wallpapers", NULL, (xmlChar *)"gnome-wp-list.dtd");
root = xmlNewNode (NULL, (xmlChar *)"wallpapers");
- xmlDocSetRootElement (wplist, root);
-
- while (list != NULL) {
- CcBackgroundXml * wpitem = list->data;
- const char * none = "(none)";
- gchar * filename;
- const gchar * scale, * shade;
- gchar * pcolor, * scolor;
-
- if (!strcmp (wpitem->filename, none) ||
- (g_utf8_validate (wpitem->filename, -1, NULL) &&
- g_file_test (wpitem->filename, G_FILE_TEST_EXISTS)))
- filename = g_strdup (wpitem->filename);
- else
- filename = g_filename_to_utf8 (wpitem->filename, -1, NULL, NULL, NULL);
-
- pcolor = gdk_color_to_string (wpitem->pcolor);
- scolor = gdk_color_to_string (wpitem->scolor);
- scale = wp_item_option_to_string (wpitem->options);
- shade = wp_item_shading_to_string (wpitem->shade_type);
-
- wallpaper = xmlNewChild (root, NULL, (xmlChar *)"wallpaper", NULL);
- cc_background_xml_set_bool (wallpaper, (xmlChar *)"deleted", wpitem->deleted);
- item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"name", (xmlChar *)wpitem->name);
- item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"filename", (xmlChar *)filename);
- item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"options", (xmlChar *)scale);
- item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"shade_type", (xmlChar *)shade);
- item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"pcolor", (xmlChar *)pcolor);
- item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"scolor", (xmlChar *)scolor);
- g_free (pcolor);
- g_free (scolor);
- g_free (filename);
+ xmlDocSetRootElement (wp, root);
+
+ g_object_get (G_OBJECT (item),
+ "name", &name,
+ "uri", &uri,
+ "shading", &shading,
+ "placement", &placement,
+ "primary-color", &pcolor,
+ "secondary-color", &scolor,
+ "flags", &flags,
+ NULL);
+
+ placement_str = enum_to_str (G_DESKTOP_TYPE_DESKTOP_BACKGROUND_STYLE, placement);
+ shading_str = enum_to_str (G_DESKTOP_TYPE_DESKTOP_BACKGROUND_SHADING, shading);
+
+ wallpaper = xmlNewChild (root, NULL, (xmlChar *)"wallpaper", NULL);
+ xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"name", (xmlChar *)name);
+ if (flags & CC_BACKGROUND_ITEM_HAS_URI &&
+ uri != NULL)
+ {
+ GFile *file;
+ char *fname;
+
+ 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)
+ {
+ xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"filename", (xmlChar *)none);
+ }
- list = g_slist_delete_link (list, list);
- g_object_unref (wpitem);
- }
- xmlSaveFormatFile (wpfile, wplist, 1);
- xmlFreeDoc (wplist);
- g_free (wpfile);
-#endif
+ if (flags & CC_BACKGROUND_ITEM_HAS_PLACEMENT)
+ xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"options", (xmlChar *)placement_str);
+ if (flags & CC_BACKGROUND_ITEM_HAS_SHADING)
+ xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"shade_type", (xmlChar *)shading_str);
+ if (flags & CC_BACKGROUND_ITEM_HAS_PCOLOR)
+ xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"pcolor", (xmlChar *)pcolor);
+ if (flags & CC_BACKGROUND_ITEM_HAS_SCOLOR)
+ xml_item = xmlNewTextChild (wallpaper, NULL, (xmlChar *)"scolor", (xmlChar *)scolor);
+
+ g_free (name);
+ g_free (pcolor);
+ g_free (scolor);
+ g_free (uri);
+
+ xmlSaveFormatFile (filename, wp, 1);
+ xmlFreeDoc (wp);
}
static void
diff --git a/panels/background/cc-background-xml.h b/panels/background/cc-background-xml.h
index a5e2628..697a877 100644
--- a/panels/background/cc-background-xml.h
+++ b/panels/background/cc-background-xml.h
@@ -52,7 +52,8 @@ GType cc_background_xml_get_type (void);
CcBackgroundXml *cc_background_xml_new (void);
-void cc_background_xml_save_list (CcBackgroundXml *data);
+void cc_background_xml_save (CcBackgroundItem *item,
+ const char *filename);
CcBackgroundItem *cc_background_xml_get_item (const char *filename);
gboolean cc_background_xml_load_xml (CcBackgroundXml *data,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]