Fri, 04 Apr 2014 01:06:03 +0200
Smileys: hide hidden smileys
--- 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