Mercurial > pidgin
diff src/account.c @ 10196:760e690a5f30
[gaim-migrate @ 11313]
A few steps closer to being able to set an oscar away message.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 16 Nov 2004 23:29:53 +0000 |
parents | 131f70fc53c1 |
children | 393f85d9f8dd |
line wrap: on
line diff
--- a/src/account.c Tue Nov 16 03:56:09 2004 +0000 +++ b/src/account.c Tue Nov 16 23:29:53 2004 +0000 @@ -553,6 +553,11 @@ gboolean active, ...) { GaimStatus *status; + gboolean changed = FALSE; + va_list args; + const char *id, *string_data; + int int_data; + gboolean boolean_data; g_return_if_fail(account != NULL); g_return_if_fail(status_id != NULL); @@ -575,7 +580,52 @@ return; } - if (gaim_status_is_active(status) == active) + if (gaim_status_is_active(status) != active) + changed = TRUE; + + /* Set any attributes */ + va_start(args, active); + while ((id = va_arg(args, const char *)) != NULL) + { + GaimValue *value; + value = gaim_status_get_attr_value(status, id); + if (value->type == GAIM_TYPE_STRING) + { + string_data = va_arg(args, const char *); + if (((string_data == NULL) && (value->data.string_data == NULL)) || + ((string_data != NULL) && (value->data.string_data != NULL) && + !strcmp(string_data, value->data.string_data))) + { + continue; + } + gaim_status_set_attr_string(status, id, string_data); + changed = TRUE; + } + else if (value->type == GAIM_TYPE_INT) + { + int_data = va_arg(args, int); + if (int_data == value->data.int_data) + continue; + gaim_status_set_attr_int(status, id, int_data); + changed = TRUE; + } + else if (value->type == GAIM_TYPE_BOOLEAN) + { + boolean_data = va_arg(args, gboolean); + if (boolean_data == value->data.boolean_data) + continue; + gaim_status_set_attr_int(status, id, boolean_data); + changed = TRUE; + } + else + { + /* We don't know what the data is--skip over it */ + va_arg(args, void *); + } + } + va_end(args); + + if (!changed) return; gaim_status_set_active(status, active);