# HG changeset patch # User Mark Doliner # Date 1137992077 0 # Node ID e3b9c6c7bcf631500ee5730f36415a8dea3c37b0 # Parent 5e14039d0415e699f2bec7dd9717722b82329c78 [gaim-migrate @ 15365] Don't create duplicate transient statuses. So like, if you switch between "Available" and "Away" a bunch of times and use the same message everywhere, you'll only have one of each in your list of recent statuses committer: Tailor Script diff -r 5e14039d0415 -r e3b9c6c7bcf6 src/gtkstatusbox.c --- a/src/gtkstatusbox.c Mon Jan 23 04:25:04 2006 +0000 +++ b/src/gtkstatusbox.c Mon Jan 23 04:54:37 2006 +0000 @@ -1067,9 +1067,17 @@ if (changed) { - /* Create a new transient saved status */ - saved_status = gaim_savedstatus_new(NULL, GPOINTER_TO_INT(data)); - gaim_savedstatus_set_message(saved_status, message); + /* If we've used this type+message before, lookup the transient status */ + saved_status = gaim_savedstatus_find_by_type_and_message( + GPOINTER_TO_INT(data), message); + + + /* If this type+message is unique then create a new transient saved status */ + if (saved_status == NULL) + { + saved_status = gaim_savedstatus_new(NULL, GPOINTER_TO_INT(data)); + gaim_savedstatus_set_message(saved_status, message); + } /* Set the status for each account */ gaim_savedstatus_activate(saved_status); diff -r 5e14039d0415 -r e3b9c6c7bcf6 src/savedstatuses.c --- a/src/savedstatuses.c Mon Jan 23 04:25:04 2006 +0000 +++ b/src/savedstatuses.c Mon Jan 23 04:54:37 2006 +0000 @@ -798,6 +798,27 @@ return NULL; } +GaimSavedStatus * +gaim_savedstatus_find_by_type_and_message(GaimStatusPrimitive type, + const char *message) +{ + GList *iter; + GaimSavedStatus *status; + + for (iter = saved_statuses; iter != NULL; iter = iter->next) + { + status = (GaimSavedStatus *)iter->data; + if ((status->type == type) && + (((status->message == NULL) && (message == NULL)) || + ((status->message != NULL) && (message != NULL) && !strcmp(status->message, message)))) + { + return status; + } + } + + return NULL; +} + gboolean gaim_savedstatus_is_transient(const GaimSavedStatus *saved_status) { diff -r 5e14039d0415 -r e3b9c6c7bcf6 src/savedstatuses.h --- a/src/savedstatuses.h Mon Jan 23 04:25:04 2006 +0000 +++ b/src/savedstatuses.h Mon Jan 23 04:54:37 2006 +0000 @@ -208,6 +208,18 @@ GaimSavedStatus *gaim_savedstatus_find_by_creation_time(time_t creation_time); /** + * Finds a saved status with the specified primitive and message. + * + * @param type The GaimStatusPrimitive for the status you're trying + * to find. + * @param message The message for the status you're trying + * to find. + * + * @return The saved status if found, or NULL. + */ +GaimSavedStatus *gaim_savedstatus_find_by_type_and_message(GaimStatusPrimitive type, const char *message); + +/** * Determines if a given saved status is "transient." * A transient saved status is one that was not * explicitly added by the user. Transient statuses