From: Mark D. <the...@us...> - 2006-01-23 04:54:46
|
Update of /cvsroot/gaim/gaim/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24052 Modified Files: gtkstatusbox.c savedstatuses.c savedstatuses.h Log Message: 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 Index: gtkstatusbox.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/gtkstatusbox.c,v retrieving revision 1.87 retrieving revision 1.88 diff -u -d -p -r1.87 -r1.88 --- gtkstatusbox.c 19 Jan 2006 00:59:25 -0000 1.87 +++ gtkstatusbox.c 23 Jan 2006 04:54:36 -0000 1.88 @@ -1067,9 +1067,17 @@ activate_currently_selected_status(GtkGa 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); Index: savedstatuses.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/savedstatuses.c,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -p -r1.37 -r1.38 --- savedstatuses.c 13 Jan 2006 02:47:12 -0000 1.37 +++ savedstatuses.c 23 Jan 2006 04:54:37 -0000 1.38 @@ -798,6 +798,27 @@ gaim_savedstatus_find_by_creation_time(t 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) { Index: savedstatuses.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/savedstatuses.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -p -r1.14 -r1.15 --- savedstatuses.h 13 Jan 2006 02:47:12 -0000 1.14 +++ savedstatuses.h 23 Jan 2006 04:54:37 -0000 1.15 @@ -208,6 +208,18 @@ GaimSavedStatus *gaim_savedstatus_find(c 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 |