| 2205 static gboolean |
2205 static gboolean |
| 2206 remove_typing_cb(gpointer null) |
2206 remove_typing_cb(gpointer null) |
| 2207 { |
2207 { |
| 2208 PurpleSavedStatus *current; |
2208 PurpleSavedStatus *current; |
| 2209 const char *message, *newmessage; |
2209 const char *message, *newmessage; |
| |
2210 char *escnewmessage; |
| 2210 PurpleStatusPrimitive prim, newprim; |
2211 PurpleStatusPrimitive prim, newprim; |
| 2211 StatusBoxItem *item; |
2212 StatusBoxItem *item; |
| 2212 |
2213 |
| 2213 current = purple_savedstatus_get_current(); |
2214 current = purple_savedstatus_get_current(); |
| 2214 message = purple_savedstatus_get_message(current); |
2215 message = purple_savedstatus_get_message(current); |
| 2215 prim = purple_savedstatus_get_type(current); |
2216 prim = purple_savedstatus_get_type(current); |
| 2216 |
2217 |
| 2217 newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext)); |
2218 newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext)); |
| 2218 item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status)); |
2219 item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status)); |
| |
2220 escnewmessage = newmessage ? g_markup_escape_text(newmessage, -1) : NULL; |
| 2219 |
2221 |
| 2220 switch (item->type) { |
2222 switch (item->type) { |
| 2221 case STATUS_PRIMITIVE: |
2223 case STATUS_PRIMITIVE: |
| 2222 newprim = item->u.prim; |
2224 newprim = item->u.prim; |
| 2223 break; |
2225 break; |
| 2226 break; |
2228 break; |
| 2227 default: |
2229 default: |
| 2228 goto end; /* 'New' or 'Saved' is selected, but this should never happen. */ |
2230 goto end; /* 'New' or 'Saved' is selected, but this should never happen. */ |
| 2229 } |
2231 } |
| 2230 |
2232 |
| 2231 if (newprim != prim || ((message && !newmessage) || |
2233 if (newprim != prim || ((message && !escnewmessage) || |
| 2232 (!message && newmessage) || |
2234 (!message && escnewmessage) || |
| 2233 (message && newmessage && g_utf8_collate(message, newmessage) != 0))) |
2235 (message && escnewmessage && g_utf8_collate(message, escnewmessage) != 0))) |
| 2234 { |
2236 { |
| 2235 PurpleSavedStatus *status = purple_savedstatus_find_transient_by_type_and_message(newprim, newmessage); |
2237 PurpleSavedStatus *status = purple_savedstatus_find_transient_by_type_and_message(newprim, escnewmessage); |
| 2236 /* Holy Crap! That's a LAWNG function name */ |
2238 /* Holy Crap! That's a LAWNG function name */ |
| 2237 if (status == NULL) |
2239 if (status == NULL) |
| 2238 { |
2240 { |
| 2239 status = purple_savedstatus_new(NULL, newprim); |
2241 status = purple_savedstatus_new(NULL, newprim); |
| 2240 purple_savedstatus_set_message(status, newmessage); |
2242 purple_savedstatus_set_message(status, escnewmessage); |
| 2241 } |
2243 } |
| 2242 |
2244 |
| 2243 purple_savedstatus_activate(status); |
2245 purple_savedstatus_activate(status); |
| 2244 } |
2246 } |
| 2245 |
2247 |
| 2246 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); |
2248 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); |
| 2247 end: |
2249 end: |
| |
2250 g_free(escnewmessage); |
| 2248 if (ggblist->typing) |
2251 if (ggblist->typing) |
| 2249 g_source_remove(ggblist->typing); |
2252 g_source_remove(ggblist->typing); |
| 2250 ggblist->typing = 0; |
2253 ggblist->typing = 0; |
| 2251 return FALSE; |
2254 return FALSE; |
| 2252 } |
2255 } |