libpurple/smiley-list.c

changeset 38281
df274be2afa2
parent 38277
061e91dd78d4
child 38283
d9ac28fb753c
--- a/libpurple/smiley-list.c	Sat Sep 17 12:40:58 2016 -0500
+++ b/libpurple/smiley-list.c	Sat Sep 17 14:47:33 2016 -0500
@@ -47,9 +47,106 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class;
 static GParamSpec *properties[PROP_LAST];
 
+/*******************************************************************************
+ * Object stuff
+ ******************************************************************************/
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleSmileyList, purple_smiley_list, G_TYPE_OBJECT);
+
+static void
+purple_smiley_list_init(PurpleSmileyList *list) {
+	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
+
+	priv->trie = purple_trie_new();
+	priv->path_map = g_hash_table_new_full(g_str_hash, g_str_equal,
+		g_free, NULL);
+	priv->shortcut_map = g_hash_table_new_full(g_str_hash, g_str_equal,
+		g_free, NULL);
+
+	PURPLE_DBUS_REGISTER_POINTER(list, PurpleSmileyList);
+}
+
+static void
+purple_smiley_list_finalize(GObject *obj) {
+	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(obj);
+	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
+	GList *it;
+
+	g_object_unref(priv->trie);
+	g_hash_table_destroy(priv->path_map);
+	g_hash_table_destroy(priv->shortcut_map);
+
+	for (it = priv->smileys; it; it = g_list_next(it)) {
+		PurpleSmiley *smiley = it->data;
+		g_object_set_data(G_OBJECT(smiley), "purple-smiley-list", NULL);
+		g_object_set_data(G_OBJECT(smiley), "purple-smiley-list-elem", NULL);
+		g_object_unref(smiley);
+	}
+	g_list_free(priv->smileys);
+
+	PURPLE_DBUS_UNREGISTER_POINTER(sl);
+
+	G_OBJECT_CLASS(purple_smiley_list_parent_class)->finalize(obj);
+}
+
+static void
+purple_smiley_list_get_property(GObject *obj, guint param_id, GValue *value,
+                                GParamSpec *pspec)
+{
+	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(obj);
+	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
+
+	switch (param_id) {
+		case PROP_DROP_FAILED_REMOTES:
+			g_value_set_boolean(value, priv->drop_failed_remotes);
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_smiley_list_set_property(GObject *obj, guint param_id,
+                                const GValue *value, GParamSpec *pspec)
+{
+	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(obj);
+	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
+
+	switch (param_id) {
+		case PROP_DROP_FAILED_REMOTES:
+			priv->drop_failed_remotes = g_value_get_boolean(value);
+			/* XXX: we could scan for remote smiley's on our list
+			 * and change the setting, but we don't care that much.
+			 */
+			break;
+		default:
+			G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
+			break;
+	}
+}
+
+static void
+purple_smiley_list_class_init(PurpleSmileyListClass *klass) {
+	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
+
+	obj_class->get_property = purple_smiley_list_get_property;
+	obj_class->set_property = purple_smiley_list_set_property;
+	obj_class->finalize = purple_smiley_list_finalize;
+
+	properties[PROP_DROP_FAILED_REMOTES] = g_param_spec_boolean(
+		"drop-failed-remotes", "Drop failed PurpleRemoteSmileys",
+		"Watch added remote smileys and remove them from the list, "
+		"if they change their state to failed", FALSE,
+		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
+
+	g_object_class_install_properties(obj_class, PROP_LAST, properties);
+}
+
+/******************************************************************************
+ * Helpers
+ *****************************************************************************/
 static void
 _list_append2(GList **head_p, GList **tail_p, gpointer data)
 {
@@ -89,22 +186,19 @@
 static const gchar *
 smiley_get_uniqid(PurpleSmiley *smiley)
 {
-	return purple_image_get_path(purple_smiley_get_image(smiley));
+	return purple_image_get_path(PURPLE_IMAGE(smiley));
 }
 
 /*******************************************************************************
  * API implementation
  ******************************************************************************/
-
 PurpleSmileyList *
-purple_smiley_list_new(void)
-{
+purple_smiley_list_new(void) {
 	return g_object_new(PURPLE_TYPE_SMILEY_LIST, NULL);
 }
 
 static void
-remote_smiley_failed(PurpleImage *smiley_img, gpointer _list)
-{
+remote_smiley_failed(PurpleImage *smiley_img, gpointer _list) {
 	PurpleSmileyList *list = _list;
 	PurpleSmiley *smiley;
 
@@ -119,10 +213,8 @@
 }
 
 gboolean
-purple_smiley_list_add(PurpleSmileyList *list, PurpleSmiley *smiley)
-{
+purple_smiley_list_add(PurpleSmileyList *list, PurpleSmiley *smiley) {
 	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
-	PurpleImage *smiley_img;
 	const gchar *smiley_path;
 	gboolean succ;
 	gchar *shortcut_escaped;
@@ -168,7 +260,6 @@
 
 	g_hash_table_insert(priv->shortcut_map, g_strdup(shortcut), smiley);
 
-	smiley_img = purple_smiley_get_image(smiley);
 	if (priv->drop_failed_remotes) {
 		g_object_set_data(G_OBJECT(smiley_img),
 			"purple-smiley-list-smiley", smiley);
@@ -191,8 +282,7 @@
 }
 
 void
-purple_smiley_list_remove(PurpleSmileyList *list, PurpleSmiley *smiley)
-{
+purple_smiley_list_remove(PurpleSmileyList *list, PurpleSmiley *smiley) {
 	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
 	GList *list_elem, *it;
 	const gchar *shortcut, *path;
@@ -239,8 +329,7 @@
 }
 
 gboolean
-purple_smiley_list_is_empty(PurpleSmileyList *list)
-{
+purple_smiley_list_is_empty(const PurpleSmileyList *list) {
 	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
 
 	g_return_val_if_fail(priv != NULL, TRUE);
@@ -250,7 +339,7 @@
 
 PurpleSmiley *
 purple_smiley_list_get_by_shortcut(PurpleSmileyList *list,
-	const gchar *shortcut)
+	                               const gchar *shortcut)
 {
 	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
 
@@ -260,8 +349,7 @@
 }
 
 PurpleTrie *
-purple_smiley_list_get_trie(PurpleSmileyList *list)
-{
+purple_smiley_list_get_trie(PurpleSmileyList *list) {
 	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
 
 	g_return_val_if_fail(priv != NULL, NULL);
@@ -270,8 +358,7 @@
 }
 
 GList *
-purple_smiley_list_get_unique(PurpleSmileyList *list)
-{
+purple_smiley_list_get_unique(PurpleSmileyList *list) {
 	GList *unique = NULL, *it;
 	GHashTable *unique_map;
 	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
@@ -300,134 +387,12 @@
 }
 
 GList *
-purple_smiley_list_get_all(PurpleSmileyList *list)
-{
-	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
+purple_smiley_list_get_all(PurpleSmileyList *list) {
+	PurpleSmileyListPrivate *priv = NULL;
 
-	g_return_val_if_fail(priv != NULL, NULL);
+	g_return_val_if_fail(PURPLE_IS_SMILEY_LIST(list), NULL);
+
+	priv = PURPLE_SMILEY_LIST_GET_PRIVATE(list);
 
 	return g_hash_table_get_values(priv->shortcut_map);
 }
-
-
-/*******************************************************************************
- * Object stuff
- ******************************************************************************/
-
-static void
-purple_smiley_list_init(GTypeInstance *instance, gpointer klass)
-{
-	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(instance);
-	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
-
-	priv->trie = purple_trie_new();
-	priv->path_map = g_hash_table_new_full(g_str_hash, g_str_equal,
-		g_free, NULL);
-	priv->shortcut_map = g_hash_table_new_full(g_str_hash, g_str_equal,
-		g_free, NULL);
-
-	PURPLE_DBUS_REGISTER_POINTER(sl, PurpleSmileyList);
-}
-
-static void
-purple_smiley_list_finalize(GObject *obj)
-{
-	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(obj);
-	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
-	GList *it;
-
-	g_object_unref(priv->trie);
-	g_hash_table_destroy(priv->path_map);
-	g_hash_table_destroy(priv->shortcut_map);
-
-	for (it = priv->smileys; it; it = g_list_next(it)) {
-		PurpleSmiley *smiley = it->data;
-		g_object_set_data(G_OBJECT(smiley), "purple-smiley-list", NULL);
-		g_object_set_data(G_OBJECT(smiley), "purple-smiley-list-elem", NULL);
-		g_object_unref(smiley);
-	}
-	g_list_free(priv->smileys);
-
-	PURPLE_DBUS_UNREGISTER_POINTER(sl);
-
-	G_OBJECT_CLASS(parent_class)->finalize(obj);
-}
-
-static void
-purple_smiley_list_get_property(GObject *object, guint par_id, GValue *value,
-	GParamSpec *pspec)
-{
-	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(object);
-	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
-
-	switch (par_id) {
-		case PROP_DROP_FAILED_REMOTES:
-			g_value_set_boolean(value, priv->drop_failed_remotes);
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_smiley_list_set_property(GObject *object, guint par_id, const GValue *value,
-	GParamSpec *pspec)
-{
-	PurpleSmileyList *sl = PURPLE_SMILEY_LIST(object);
-	PurpleSmileyListPrivate *priv = PURPLE_SMILEY_LIST_GET_PRIVATE(sl);
-
-	switch (par_id) {
-		case PROP_DROP_FAILED_REMOTES:
-			priv->drop_failed_remotes = g_value_get_boolean(value);
-			/* XXX: we could scan for remote smiley's on our list
-			 * and change the setting, but we don't care that much.
-			 */
-			break;
-		default:
-			G_OBJECT_WARN_INVALID_PROPERTY_ID(object, par_id, pspec);
-			break;
-	}
-}
-
-static void
-purple_smiley_list_class_init(PurpleSmileyListClass *klass)
-{
-	GObjectClass *gobj_class = G_OBJECT_CLASS(klass);
-
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleSmileyListPrivate));
-
-	gobj_class->get_property = purple_smiley_list_get_property;
-	gobj_class->set_property = purple_smiley_list_set_property;
-	gobj_class->finalize = purple_smiley_list_finalize;
-
-	properties[PROP_DROP_FAILED_REMOTES] = g_param_spec_boolean(
-		"drop-failed-remotes", "Drop failed PurpleRemoteSmileys",
-		"Watch added remote smileys and remove them from the list, "
-		"if they change their state to failed", FALSE,
-		G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
-
-	g_object_class_install_properties(gobj_class, PROP_LAST, properties);
-}
-
-GType
-purple_smiley_list_get_type(void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY(type == 0)) {
-		static const GTypeInfo info = {
-			.class_size = sizeof(PurpleSmileyListClass),
-			.class_init = (GClassInitFunc)purple_smiley_list_class_init,
-			.instance_size = sizeof(PurpleSmileyList),
-			.instance_init = purple_smiley_list_init,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-			"PurpleSmileyList", &info, 0);
-	}
-
-	return type;
-}

mercurial