| 2043 return len; |
2043 return len; |
| 2044 |
2044 |
| 2045 return 0; |
2045 return 0; |
| 2046 } |
2046 } |
| 2047 |
2047 |
| |
2048 /* a hack-around to prevent trying to doing gtk_smiley_tree_remove on a |
| |
2049 GtkIMHtml that no longer lives... I know this is ugly, but I couldn't find |
| |
2050 a better way to handle it for now, since there lives a list GtkIMHtmlSmileys |
| |
2051 in gtksmiley.c and those can end up having dangling imhtml pointers */ |
| |
2052 static gboolean |
| |
2053 gtk_imhtml_is_alive(const GtkIMHtml *imhtml) |
| |
2054 { |
| |
2055 GList *convs; |
| |
2056 |
| |
2057 for (convs = purple_get_conversations() ; convs != NULL ; |
| |
2058 convs = g_list_next(convs)) { |
| |
2059 PurpleConversation *conv = (PurpleConversation *) convs->data; |
| |
2060 |
| |
2061 if (PIDGIN_IS_PIDGIN_CONVERSATION(conv)) { |
| |
2062 if (GTK_IMHTML(PIDGIN_CONVERSATION(conv)->imhtml) == imhtml |
| |
2063 || GTK_IMHTML(PIDGIN_CONVERSATION(conv)->entry) == imhtml) { |
| |
2064 return TRUE; |
| |
2065 } |
| |
2066 } |
| |
2067 } |
| |
2068 return FALSE; |
| |
2069 } |
| |
2070 |
| 2048 static void |
2071 static void |
| 2049 gtk_imhtml_disassociate_smiley_foreach(gpointer key, gpointer value, |
2072 gtk_imhtml_disassociate_smiley_foreach(gpointer key, gpointer value, |
| 2050 gpointer user_data) |
2073 gpointer user_data) |
| 2051 { |
2074 { |
| 2052 GtkSmileyTree *tree = (GtkSmileyTree *) value; |
2075 GtkSmileyTree *tree = (GtkSmileyTree *) value; |
| 2055 } |
2078 } |
| 2056 |
2079 |
| 2057 static void |
2080 static void |
| 2058 gtk_imhtml_disassociate_smiley(GtkIMHtmlSmiley *smiley) |
2081 gtk_imhtml_disassociate_smiley(GtkIMHtmlSmiley *smiley) |
| 2059 { |
2082 { |
| 2060 if (smiley->imhtml) { |
2083 if (smiley->imhtml && gtk_imhtml_is_alive(smiley->imhtml)) { |
| 2061 gtk_smiley_tree_remove(smiley->imhtml->default_smilies, smiley); |
2084 gtk_smiley_tree_remove(smiley->imhtml->default_smilies, smiley); |
| 2062 g_hash_table_foreach(smiley->imhtml->smiley_data, |
2085 g_hash_table_foreach(smiley->imhtml->smiley_data, |
| 2063 gtk_imhtml_disassociate_smiley_foreach, smiley); |
2086 gtk_imhtml_disassociate_smiley_foreach, smiley); |
| |
2087 smiley->imhtml = NULL; |
| 2064 } |
2088 } |
| 2065 } |
2089 } |
| 2066 |
2090 |
| 2067 void |
2091 void |
| 2068 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml, |
2092 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml, |