diff libpurple/theme-loader.c @ 32819:2c6510167895 default tip

propagate from branch 'im.pidgin.pidgin.2.x.y' (head 3315c5dfbd0ad16511bdcf865e5b07c02d07df24) to branch 'im.pidgin.pidgin' (head cbd1eda6bcbf0565ae7766396bb8f6f419cb6a9a)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 02 Jun 2012 02:30:49 +0000
parents 5050da3d9c95
children
line wrap: on
line diff
--- a/libpurple/theme-loader.c	Sat Jun 02 02:30:13 2012 +0000
+++ b/libpurple/theme-loader.c	Sat Jun 02 02:30:49 2012 +0000
@@ -24,7 +24,7 @@
 #include "theme-loader.h"
 
 #define PURPLE_THEME_LOADER_GET_PRIVATE(PurpleThemeLoader) \
-	((PurpleThemeLoaderPrivate *) ((PurpleThemeLoader)->priv))
+	(G_TYPE_INSTANCE_GET_PRIVATE((PurpleThemeLoader), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderPrivate))
 
 void purple_theme_loader_set_type_string(PurpleThemeLoader *loader, const gchar *type);
 
@@ -85,12 +85,19 @@
 	}
 }
 
-static void
-purple_theme_loader_init(GTypeInstance *instance,
-			gpointer klass)
+static gboolean
+purple_theme_loader_probe_directory(PurpleThemeLoader *loader, const gchar *dir)
 {
-	PurpleThemeLoader *loader = PURPLE_THEME_LOADER(instance);
-	loader->priv = g_new0(PurpleThemeLoaderPrivate, 1);
+	const gchar *type = purple_theme_loader_get_type_string(loader);
+	char *themedir;
+	gboolean result;
+
+	/* Checks for directory as $root/purple/$type */
+	themedir = g_build_filename(dir, "purple", type, NULL);
+	result = g_file_test(themedir, G_FILE_TEST_IS_DIR);
+	g_free(themedir);
+
+	return result;
 }
 
 static void
@@ -100,7 +107,6 @@
 	PurpleThemeLoaderPrivate *priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader);
 
 	g_free(priv->type);
-	g_free(priv);
 
 	parent_class->finalize(obj);
 }
@@ -113,6 +119,8 @@
 
 	parent_class = g_type_class_peek_parent(klass);
 
+	g_type_class_add_private(klass, sizeof(PurpleThemeLoaderPrivate));
+
 	obj_class->get_property = purple_theme_loader_get_property;
 	obj_class->set_property = purple_theme_loader_set_property;
 	obj_class->finalize = purple_theme_loader_finalize;
@@ -139,7 +147,7 @@
 			NULL, /* class_data */
 			sizeof(PurpleThemeLoader),
 			0, /* n_preallocs */
-			purple_theme_loader_init, /* instance_init */
+			NULL, /* instance_init */
 			NULL, /* value table */
 		};
 		type = g_type_register_static(G_TYPE_OBJECT,
@@ -182,3 +190,13 @@
 {
 	return PURPLE_THEME_LOADER_GET_CLASS(loader)->purple_theme_loader_build(dir);
 }
+
+gboolean
+purple_theme_loader_probe(PurpleThemeLoader *loader, const gchar *dir)
+{
+	if (PURPLE_THEME_LOADER_GET_CLASS(loader)->probe_directory != NULL)
+		return PURPLE_THEME_LOADER_GET_CLASS(loader)->probe_directory(dir);
+	else
+		return purple_theme_loader_probe_directory(loader, dir);
+}
+