Smileys: hide hidden smileys

Fri, 04 Apr 2014 01:06:03 +0200

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Fri, 04 Apr 2014 01:06:03 +0200
changeset 35739
cb9acfd6fa1e
parent 35738
030ce6840163
child 35740
b7962ff7748d

Smileys: hide hidden smileys

libpurple/smiley-parser.c file | annotate | diff | comparison | revisions
pidgin/gtksmiley-theme.c file | annotate | diff | comparison | revisions
pidgin/gtkwebviewtoolbar.c file | annotate | diff | comparison | revisions
--- a/libpurple/smiley-parser.c	Fri Apr 04 00:47:41 2014 +0200
+++ b/libpurple/smiley-parser.c	Fri Apr 04 01:06:03 2014 +0200
@@ -101,6 +101,8 @@
 	 * if protocol doesn't support it? */
 
 	/* TODO: don't replace text within tags, ie. <span style=":)"> */
+	/* TODO: parse greedily (as much as possible) when PurpleTrie
+	 * provides support for it. */
 	return purple_trie_multi_replace(tries, message,
 		purple_smiley_parse_cb, NULL);
 }
--- a/pidgin/gtksmiley-theme.c	Fri Apr 04 00:47:41 2014 +0200
+++ b/pidgin/gtksmiley-theme.c	Fri Apr 04 01:06:03 2014 +0200
@@ -420,7 +420,7 @@
 PurpleSmileyList *
 pidgin_smiley_theme_for_conv(PurpleConversation *conv)
 {
-	PurpleAccount *acc;
+	PurpleAccount *acc = NULL;
 	PurpleSmileyTheme *theme;
 	const gchar *proto_name = NULL;
 
@@ -485,6 +485,9 @@
 
 				smiley = purple_smiley_new(
 					shortcut, smiley_path);
+				g_object_set_data(G_OBJECT(smiley),
+					"pidgin-smiley-hidden",
+					GINT_TO_POINTER(smiley_idx->hidden));
 				purple_smiley_list_add(proto_smileys, smiley);
 				g_object_unref(smiley);
 			}
@@ -498,11 +501,12 @@
 pidgin_smiley_theme_get_smileys_impl(PurpleSmileyTheme *theme, gpointer ui_data)
 {
 	PidginSmileyThemePrivate *priv = PIDGIN_SMILEY_THEME_GET_PRIVATE(theme);
-	PurpleSmileyList *smileys;
+	PurpleSmileyList *smileys = NULL;
 
 	pidgin_smiley_theme_activate_impl(theme);
 
-	smileys = g_hash_table_lookup(priv->smiley_lists_map, ui_data);
+	if (ui_data)
+		smileys = g_hash_table_lookup(priv->smiley_lists_map, ui_data);
 	if (smileys != NULL)
 		return smileys;
 
--- a/pidgin/gtkwebviewtoolbar.c	Fri Apr 04 00:47:41 2014 +0200
+++ b/pidgin/gtkwebviewtoolbar.c	Fri Apr 04 01:06:03 2014 +0200
@@ -825,7 +825,7 @@
 	PidginWebViewToolbarPriv *priv =
 		PIDGIN_WEBVIEWTOOLBAR_GET_PRIVATE(toolbar);
 	PurpleSmileyList *smileys_from_theme, *smileys_from_custom = NULL;
-	GList *theme_smileys = NULL, *custom_smileys = NULL;
+	GList *theme_smileys = NULL, *custom_smileys = NULL, *it, *it_next;
 	PidginWebViewButtons webview_format;
 
 	GtkWidget *dialog, *vbox;
@@ -848,7 +848,20 @@
 		theme_smileys = purple_smiley_list_get_unique(
 			smileys_from_theme);
 	}
-	/* TODO: remove hidden */
+
+	/* remove hidden theme smileys */
+	for (it = theme_smileys; it; it = it_next) {
+		PurpleSmiley *smiley = it->data;
+		it_next = g_list_next(it);
+
+		if (!g_object_get_data(G_OBJECT(smiley),
+			"pidgin-smiley-hidden"))
+		{
+			continue;
+		}
+
+		theme_smileys = g_list_delete_link(theme_smileys, it);
+	}
 
 	supports_custom = (webview_format & PIDGIN_WEBVIEW_CUSTOM_SMILEY);
 	if (supports_custom) {
@@ -888,9 +901,7 @@
 		/* create list of smileys sorted by height */
 		while (theme_smileys) {
 			PidginWebViewSmiley *smiley = (PidginWebViewSmiley *)theme_smileys->data;
-			if (!pidgin_webview_smiley_get_hidden(smiley)) {
 				ls = sort_smileys(ls, toolbar, &max_line_width, smiley);
-			}
 			theme_smileys = g_slist_delete_link(theme_smileys, theme_smileys);
 		}
 #else

mercurial