# HG changeset patch # User Elliott Sales de Andrade # Date 1330756789 0 # Node ID 5050da3d9c9535dacb6ab15ba99529a2ca874262 # Parent 089acf3a8aa17a0668d0ff5b3856f86418447cfc Add a directory probe to theme loaders. The default just checks for $dir/purple/$type as the theme manager currently does. diff -r 089acf3a8aa1 -r 5050da3d9c95 libpurple/theme-loader.c --- a/libpurple/theme-loader.c Tue Feb 28 07:10:15 2012 +0000 +++ b/libpurple/theme-loader.c Sat Mar 03 06:39:49 2012 +0000 @@ -85,6 +85,21 @@ } } +static gboolean +purple_theme_loader_probe_directory(PurpleThemeLoader *loader, const gchar *dir) +{ + 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 purple_theme_loader_finalize(GObject *obj) { @@ -175,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); +} + diff -r 089acf3a8aa1 -r 5050da3d9c95 libpurple/theme-loader.h --- a/libpurple/theme-loader.h Tue Feb 28 07:10:15 2012 +0000 +++ b/libpurple/theme-loader.h Sat Mar 03 06:39:49 2012 +0000 @@ -56,6 +56,7 @@ { GObjectClass parent_class; PurpleTheme *((*purple_theme_loader_build)(const gchar*)); + gboolean (*probe_directory)(const gchar *); }; /**************************************************************************/ @@ -88,5 +89,19 @@ */ PurpleTheme *purple_theme_loader_build(PurpleThemeLoader *loader, const gchar *dir); +/** + * Probes a directory to see if it might possibly contain a theme + * + * This function might only check for obvious files or directory structure. + * Loading of a theme may fail for other reasons. + * The default prober checks for $dir/purple/$type. + * + * @param loader The theme loader + * @param dir The directory that may contain the theme + * + * @returns TRUE if the directory appears to contain a theme, FALSE otherwise. + */ +gboolean purple_theme_loader_probe(PurpleThemeLoader *loader, const gchar *dir); + G_END_DECLS #endif /* PURPLE_THEME_LOADER_H */