Mercurial > pidgin.yaz
diff pidgin/gtkimhtml.c @ 27906:6ecfc6b9667c
propagate from branch 'im.pidgin.pidgin' (head ca4b6e987b967927b0f8bd001bc33440a6885000)
to branch 'im.pidgin.pidgin.yaz' (head 7a92169e2ac82026d2b2918ed9662c7fd42e3280)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 17 Nov 2008 06:15:33 +0000 |
parents | 45ce87f9a07f 9ea84135db24 |
children | a959b17ffc57 |
line wrap: on
line diff
--- a/pidgin/gtkimhtml.c Fri Oct 31 08:37:42 2008 +0000 +++ b/pidgin/gtkimhtml.c Mon Nov 17 06:15:33 2008 +0000 @@ -2069,12 +2069,23 @@ } static void +gtk_imhtml_disconnect_smiley(GtkIMHtml *imhtml, GtkIMHtmlSmiley *smiley) +{ + smiley->imhtml = NULL; + g_signal_handlers_disconnect_matched(imhtml, G_SIGNAL_MATCH_DATA, 0, 0, + NULL, NULL, smiley); +} + +static void gtk_imhtml_disassociate_smiley(GtkIMHtmlSmiley *smiley) { if (smiley->imhtml) { gtk_smiley_tree_remove(smiley->imhtml->default_smilies, smiley); g_hash_table_foreach(smiley->imhtml->smiley_data, gtk_imhtml_disassociate_smiley_foreach, smiley); + g_signal_handlers_disconnect_matched(smiley->imhtml, G_SIGNAL_MATCH_DATA, + 0, 0, NULL, NULL, smiley); + smiley->imhtml = NULL; } } @@ -2094,9 +2105,19 @@ g_hash_table_insert(imhtml->smiley_data, g_strdup(sml), tree); } + /* need to disconnect old imhtml, if there is one */ + if (smiley->imhtml) { + g_signal_handlers_disconnect_matched(smiley->imhtml, G_SIGNAL_MATCH_DATA, + 0, 0, NULL, NULL, smiley); + } + smiley->imhtml = imhtml; gtk_smiley_tree_insert (tree, smiley); + + /* connect destroy signal for the imhtml */ + g_signal_connect(imhtml, "destroy", G_CALLBACK(gtk_imhtml_disconnect_smiley), + smiley); } static gboolean