diff pidgin/gtkconv-theme.c @ 32645:a7a6770f26e2

Load the list of variants when building the theme.
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Mon, 19 Sep 2011 18:48:00 +0000
parents 504a62af2dd0
children f857a6db3bd9
line wrap: on
line diff
--- a/pidgin/gtkconv-theme.c	Mon Sep 19 03:10:41 2011 +0000
+++ b/pidgin/gtkconv-theme.c	Mon Sep 19 18:48:00 2011 +0000
@@ -47,6 +47,7 @@
 typedef struct {
 	/* current config options */
 	char     *variant; /* allowed to be NULL if there are no variants */
+	GList    *variants;
 
 	/* Info.plist keys/values */
 	GHashTable *info;
@@ -552,49 +553,48 @@
 }
 
 void
-pidgin_conversation_theme_save_state(const PidginConvTheme *theme)
+pidgin_conversation_theme_add_variant(PidginConvTheme *theme, const char *variant)
+{
+	PidginConvThemePrivate *priv;
+	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
+
+	priv->variants = g_list_prepend(priv->variants, g_strdup(variant));
+}
+
+const char *
+pidgin_conversation_theme_get_variant(PidginConvTheme *theme)
+{
+	PidginConvThemePrivate *priv;
+	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
+
+	return g_strdup(priv->variant);
+}
+
+void
+pidgin_conversation_theme_set_variant(PidginConvTheme *theme, const char *variant)
 {
 	PidginConvThemePrivate *priv;
 	const GValue *val;
 	char *prefname;
-	char *variant;
+	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
 
-	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
+	g_free(priv->variant);
+	priv->variant = g_strdup(variant);
 
 	val = get_key(priv, "CFBundleIdentifier", FALSE);
-	prefname = g_strdup_printf(PIDGIN_PREFS_ROOT "/conversation/themes/%s", g_value_get_string(val));
-	variant = g_strdup_printf("%s/variant", prefname);
-
-	purple_debug_info("webkit", "saving state with variant %s\n", priv->variant);
-	purple_prefs_add_none(prefname);
-	purple_prefs_add_string(variant, "");
-	purple_prefs_set_string(variant, priv->variant);
-
+	prefname = g_strdup_printf(PIDGIN_PREFS_ROOT "/conversation/themes/%s/variant",
+	                           g_value_get_string(val));
+	purple_prefs_set_string(prefname, variant);
 	g_free(prefname);
-	g_free(variant);
 }
 
-static void
-pidgin_conversation_theme_load_state(PidginConvTheme *theme)
+const GList *
+pidgin_conversation_theme_get_variants(PidginConvTheme *theme)
 {
 	PidginConvThemePrivate *priv;
-	const GValue *val;
-	char *prefname;
-	const char* value;
-	gboolean changed;
-
 	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
 
-	val = get_key(priv, "CFBundleIdentifier", FALSE);
-	prefname = g_strdup_printf(PIDGIN_PREFS_ROOT "/conversation/themes/%s/variant", g_value_get_string(val));
-
-	value = purple_prefs_get_string(prefname);
-	changed = !priv->variant || !g_str_equal(priv->variant, value);
-
-	g_free(priv->variant);
-	priv->variant = g_strdup(value);
-
-	g_free(prefname);
+	return priv->variants;
 }
 
 PidginConvTheme *
@@ -622,65 +622,6 @@
 	return ret;
 }
 
-void
-pidgin_conversation_theme_set_variant(PidginConvTheme *theme, const char *variant)
-{
-	PidginConvThemePrivate *priv;
-
-	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
-
-	/* I'm not going to test whether this variant is valid! */
-	g_free(priv->variant);
-	priv->variant = g_strdup(variant);
-
-	/* todo, the style has "changed". Ideally, I would like to use signals at this point. */
-}
-
-char *
-pidgin_conversation_theme_get_variant(PidginConvTheme *theme)
-{
-	PidginConvThemePrivate *priv;
-	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
-
-	return g_strdup(priv->variant);
-}
-
-/**
- * Get a list of variants supported by the style.
- */
-GList *
-pidgin_conversation_theme_get_variants(PidginConvTheme *theme)
-{
-	PidginConvThemePrivate *priv;
-	GList *ret = NULL;
-	GDir *variants;
-	const char *css_file;
-	char *css;
-	char *variant_dir;
-
-	priv = PIDGIN_CONV_THEME_GET_PRIVATE(theme);
-
-	variant_dir = g_build_filename(purple_theme_get_dir(PURPLE_THEME(theme)), "Contents", "Resources", "Variants", NULL);
-
-	variants = g_dir_open(variant_dir, 0, NULL);
-	if (!variants)
-		return NULL;
-
-	while ((css_file = g_dir_read_name(variants)) != NULL) {
-		if (!g_str_has_suffix(css_file, ".css"))
-			continue;
-
-		css = g_strndup(css_file, strlen(css_file) - 4);
-		ret = g_list_append(ret, css);
-	}
-
-	g_dir_close(variants);
-	g_free(variant_dir);
-
-	ret = g_list_sort(ret, (GCompareFunc)g_strcmp0);
-	return ret;
-}
-
 char *
 pidgin_conversation_theme_get_css(PidginConvTheme *theme)
 {