# HG changeset patch # User kartikmohta@gmail.com # Date 1302225157 0 # Node ID 4076f53cdd8452a3d163767c0f820cbd645080cc # Parent 15581933dc3156874d40b4ee13fbb4bed0dcf5b8 Delete buddy pounces when removing a buddy. Fixes #1131. committer: John Bailey diff -r 15581933dc31 -r 4076f53cdd84 libpurple/blist.c --- a/libpurple/blist.c Fri Apr 08 00:53:11 2011 +0000 +++ b/libpurple/blist.c Fri Apr 08 01:12:37 2011 +0000 @@ -28,6 +28,7 @@ #include "dbus-maybe.h" #include "debug.h" #include "notify.h" +#include "pounce.h" #include "prefs.h" #include "privacy.h" #include "prpl.h" @@ -2184,6 +2185,9 @@ if (ops && ops->remove_node) ops->remove_node(node); + /* Remove this buddy's pounces */ + purple_pounce_destroy_all_by_buddy(buddy); + /* Signal that the buddy has been removed before freeing the memory for it */ purple_signal_emit(purple_blist_get_handle(), "buddy-removed", buddy); diff -r 15581933dc31 -r 4076f53cdd84 libpurple/pounce.c --- a/libpurple/pounce.c Fri Apr 08 00:53:11 2011 +0000 +++ b/libpurple/pounce.c Fri Apr 08 01:12:37 2011 +0000 @@ -695,6 +695,28 @@ } void +purple_pounce_destroy_all_by_buddy(PurpleBuddy *buddy) +{ + const char *pouncee; + PurpleAccount *pouncer; + PurplePounce *pounce; + GList *l, *l_next; + + g_return_if_fail(buddy != NULL); + + for (l = purple_pounces_get_all(); l != NULL; l = l_next) { + pounce = (PurplePounce *)l->data; + l_next = l->next; + + pouncer = purple_pounce_get_pouncer(pounce); + pouncee = purple_pounce_get_pouncee(pounce); + + if ( (pouncer == buddy->account) && (strcmp(pouncee, buddy->name) == 0) ) + purple_pounce_destroy(pounce); + } +} + +void purple_pounce_set_events(PurplePounce *pounce, PurplePounceEvent events) { g_return_if_fail(pounce != NULL); diff -r 15581933dc31 -r 4076f53cdd84 libpurple/pounce.h --- a/libpurple/pounce.h Fri Apr 08 00:53:11 2011 +0000 +++ b/libpurple/pounce.h Fri Apr 08 01:12:37 2011 +0000 @@ -123,6 +123,13 @@ void purple_pounce_destroy_all_by_account(PurpleAccount *account); /** + * Destroys all buddy pounces for a buddy + * + * @param buddy The buddy whose pounces are to be removed + */ +void purple_pounce_destroy_all_by_buddy(PurpleBuddy *buddy); + +/** * Sets the events a pounce should watch for. * * @param pounce The buddy pounce.