comparison 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
comparison
equal deleted inserted replaced
32818:01ff09d4a463 32819:2c6510167895
22 22
23 #include "internal.h" 23 #include "internal.h"
24 #include "theme-loader.h" 24 #include "theme-loader.h"
25 25
26 #define PURPLE_THEME_LOADER_GET_PRIVATE(PurpleThemeLoader) \ 26 #define PURPLE_THEME_LOADER_GET_PRIVATE(PurpleThemeLoader) \
27 ((PurpleThemeLoaderPrivate *) ((PurpleThemeLoader)->priv)) 27 (G_TYPE_INSTANCE_GET_PRIVATE((PurpleThemeLoader), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderPrivate))
28 28
29 void purple_theme_loader_set_type_string(PurpleThemeLoader *loader, const gchar *type); 29 void purple_theme_loader_set_type_string(PurpleThemeLoader *loader, const gchar *type);
30 30
31 /****************************************************************************** 31 /******************************************************************************
32 * Structs 32 * Structs
83 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec); 83 G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, psec);
84 break; 84 break;
85 } 85 }
86 } 86 }
87 87
88 static void 88 static gboolean
89 purple_theme_loader_init(GTypeInstance *instance, 89 purple_theme_loader_probe_directory(PurpleThemeLoader *loader, const gchar *dir)
90 gpointer klass) 90 {
91 { 91 const gchar *type = purple_theme_loader_get_type_string(loader);
92 PurpleThemeLoader *loader = PURPLE_THEME_LOADER(instance); 92 char *themedir;
93 loader->priv = g_new0(PurpleThemeLoaderPrivate, 1); 93 gboolean result;
94
95 /* Checks for directory as $root/purple/$type */
96 themedir = g_build_filename(dir, "purple", type, NULL);
97 result = g_file_test(themedir, G_FILE_TEST_IS_DIR);
98 g_free(themedir);
99
100 return result;
94 } 101 }
95 102
96 static void 103 static void
97 purple_theme_loader_finalize(GObject *obj) 104 purple_theme_loader_finalize(GObject *obj)
98 { 105 {
99 PurpleThemeLoader *loader = PURPLE_THEME_LOADER(obj); 106 PurpleThemeLoader *loader = PURPLE_THEME_LOADER(obj);
100 PurpleThemeLoaderPrivate *priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader); 107 PurpleThemeLoaderPrivate *priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader);
101 108
102 g_free(priv->type); 109 g_free(priv->type);
103 g_free(priv);
104 110
105 parent_class->finalize(obj); 111 parent_class->finalize(obj);
106 } 112 }
107 113
108 static void 114 static void
110 { 116 {
111 GObjectClass *obj_class = G_OBJECT_CLASS(klass); 117 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
112 GParamSpec *pspec; 118 GParamSpec *pspec;
113 119
114 parent_class = g_type_class_peek_parent(klass); 120 parent_class = g_type_class_peek_parent(klass);
121
122 g_type_class_add_private(klass, sizeof(PurpleThemeLoaderPrivate));
115 123
116 obj_class->get_property = purple_theme_loader_get_property; 124 obj_class->get_property = purple_theme_loader_get_property;
117 obj_class->set_property = purple_theme_loader_set_property; 125 obj_class->set_property = purple_theme_loader_set_property;
118 obj_class->finalize = purple_theme_loader_finalize; 126 obj_class->finalize = purple_theme_loader_finalize;
119 127
137 (GClassInitFunc)purple_theme_loader_class_init, /* class_init */ 145 (GClassInitFunc)purple_theme_loader_class_init, /* class_init */
138 NULL, /* class_finalize */ 146 NULL, /* class_finalize */
139 NULL, /* class_data */ 147 NULL, /* class_data */
140 sizeof(PurpleThemeLoader), 148 sizeof(PurpleThemeLoader),
141 0, /* n_preallocs */ 149 0, /* n_preallocs */
142 purple_theme_loader_init, /* instance_init */ 150 NULL, /* instance_init */
143 NULL, /* value table */ 151 NULL, /* value table */
144 }; 152 };
145 type = g_type_register_static(G_TYPE_OBJECT, 153 type = g_type_register_static(G_TYPE_OBJECT,
146 "PurpleThemeLoader", &info, G_TYPE_FLAG_ABSTRACT); 154 "PurpleThemeLoader", &info, G_TYPE_FLAG_ABSTRACT);
147 } 155 }
180 PurpleTheme * 188 PurpleTheme *
181 purple_theme_loader_build(PurpleThemeLoader *loader, const gchar *dir) 189 purple_theme_loader_build(PurpleThemeLoader *loader, const gchar *dir)
182 { 190 {
183 return PURPLE_THEME_LOADER_GET_CLASS(loader)->purple_theme_loader_build(dir); 191 return PURPLE_THEME_LOADER_GET_CLASS(loader)->purple_theme_loader_build(dir);
184 } 192 }
193
194 gboolean
195 purple_theme_loader_probe(PurpleThemeLoader *loader, const gchar *dir)
196 {
197 if (PURPLE_THEME_LOADER_GET_CLASS(loader)->probe_directory != NULL)
198 return PURPLE_THEME_LOADER_GET_CLASS(loader)->probe_directory(dir);
199 else
200 return purple_theme_loader_probe_directory(loader, dir);
201 }
202