diff libpurple/theme.c @ 23461:fecc8e2612c4

Fixed some things needed for proper gobfication (init/finalize/etc)
author Justin Rodriguez <ffdragon@soc.pidgin.im>
date Mon, 16 Jun 2008 19:48:56 +0000
parents 8793058bc318
children d60c3d1c6966
line wrap: on
line diff
--- a/libpurple/theme.c	Fri Jun 13 21:33:17 2008 +0000
+++ b/libpurple/theme.c	Mon Jun 16 19:48:56 2008 +0000
@@ -26,6 +26,7 @@
 #define PURPLE_THEME_GET_PRIVATE(PurpleTheme) \
 	((PurpleThemePrivate *) ((PurpleTheme)->priv))
 
+void purple_theme_set_type_string(PurpleTheme *theme, const gchar *type);
 
 /******************************************************************************
  * Structs
@@ -43,6 +44,8 @@
  * Globals
  *****************************************************************************/
 
+static GObjectClass *parent_class = NULL;
+
 /******************************************************************************
  * Enums
  *****************************************************************************/
@@ -115,6 +118,9 @@
 		case PROP_AUTHOR:
 			purple_theme_set_author(theme, g_value_get_string(value));
 			break;
+		case PROP_TYPE:
+			purple_theme_set_type_string(theme, g_value_get_string(value));
+			break;
 		case PROP_DIR:
 			purple_theme_set_dir(theme, g_value_get_string(value));
 			break;
@@ -128,16 +134,32 @@
 }
 
 static void
+purple_theme_finalize(GObject *obj)
+{
+	PurpleTheme *theme = PURPLE_THEME(obj);	
+	PurpleThemePrivate *priv = PURPLE_THEME_GET_PRIVATE(theme);
+	
+	g_free(priv->name);
+	g_free(priv->description);
+	g_free(priv->author);
+	g_free(priv->type);
+	g_free(priv->dir);
+	purple_imgstore_unref(priv->img);
+
+	G_OBJECT_CLASS (parent_class)->finalize (obj);
+}
+
+static void
 purple_theme_class_init (PurpleThemeClass *klass)
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 	GParamSpec *pspec;
 
-	/* 2.4
-	 * g_type_class_add_private(klass, sizeof(PurpleThemePrivate)); */
+	parent_class = g_type_class_peek_parent(klass);
 
 	obj_class->get_property = purple_theme_get_property;
 	obj_class->set_property = purple_theme_set_property;
+	obj_class->finalize = purple_theme_finalize;
 	
 	/* NAME */
 	pspec = g_param_spec_string(PROP_NAME_S, "Name",
@@ -289,6 +311,20 @@
 	return priv->type;
 }
 
+/* < private > */
+void
+purple_theme_set_type_string(PurpleTheme *theme, const gchar *type)
+{
+	PurpleThemePrivate *priv;
+
+	g_return_if_fail(PURPLE_IS_THEME(theme));
+
+	priv = PURPLE_THEME_GET_PRIVATE(theme);
+
+	g_free(priv->type);
+	priv->type = g_strdup (type);
+}
+
 gchar *
 purple_theme_get_dir(PurpleTheme *theme) 
 {