Mercurial > pidgin.yaz
diff src/request.c @ 7909:5be22af4ebfc
[gaim-migrate @ 8569]
Reworked the list field API a bit. Items now have data associated with them
(which is not automatically freed by the API).
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Sun, 21 Dec 2003 20:51:05 +0000 |
parents | 1d0bc32f8038 |
children | cc77bd88cd72 |
line wrap: on
line diff
--- a/src/request.c Sun Dec 21 19:58:11 2003 +0000 +++ b/src/request.c Sun Dec 21 20:51:05 2003 +0000 @@ -299,6 +299,8 @@ g_list_foreach(field->u.list.selected, (GFunc)g_free, NULL); g_list_free(field->u.list.selected); } + + g_hash_table_destroy(field->u.list.item_data); } g_free(field); @@ -649,37 +651,22 @@ } GaimRequestField * -gaim_request_field_list_new(const char *id, const char *text, GList *items) +gaim_request_field_list_new(const char *id, const char *text) { GaimRequestField *field; - g_return_val_if_fail(id != NULL, NULL); - g_return_val_if_fail(items != NULL, NULL); + g_return_val_if_fail(id != NULL, NULL); + g_return_val_if_fail(text != NULL, NULL); field = gaim_request_field_new(id, text, GAIM_REQUEST_FIELD_LIST); - gaim_request_field_list_set_items(field, items); + field->u.list.item_data = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); return field; } void -gaim_request_field_list_set_items(GaimRequestField *field, GList *items) -{ - g_return_if_fail(field != NULL); - g_return_if_fail(items != NULL); - g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); - - if (field->u.list.items != NULL) - { - g_list_foreach(field->u.list.items, (GFunc)g_free, NULL); - g_list_free(field->u.list.items); - } - - field->u.list.items = items; -} - -void gaim_request_field_list_set_multi_select(GaimRequestField *field, gboolean multi_select) { @@ -698,14 +685,29 @@ return field->u.list.multiple_selection; } +void * +gaim_request_field_list_get_data(const GaimRequestField *field, + const char *text) +{ + g_return_val_if_fail(field != NULL, NULL); + g_return_val_if_fail(text != NULL, NULL); + g_return_val_if_fail(field->type == GAIM_REQUEST_FIELD_LIST, NULL); + + return g_hash_table_lookup(field->u.list.item_data, text); +} + void -gaim_request_field_list_add(GaimRequestField *field, const char *item) +gaim_request_field_list_add(GaimRequestField *field, const char *item, + void *data) { g_return_if_fail(field != NULL); g_return_if_fail(item != NULL); + g_return_if_fail(data != NULL); g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); field->u.list.items = g_list_append(field->u.list.items, g_strdup(item)); + + g_hash_table_insert(field->u.list.item_data, g_strdup(item), data); } void @@ -715,8 +717,8 @@ g_return_if_fail(item != NULL); g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); - field->u.list.selected = - g_list_append(field->u.list.selected, g_strdup(item)); + field->u.list.selected = g_list_append(field->u.list.selected, + g_strdup(item)); } void @@ -725,7 +727,17 @@ g_return_if_fail(field != NULL); g_return_if_fail(field->type == GAIM_REQUEST_FIELD_LIST); - gaim_request_field_list_set_selected(field, NULL); + if (field->u.list.items != NULL) + { + g_list_foreach(field->u.list.items, (GFunc)g_free, NULL); + g_list_free(field->u.list.items); + field->u.list.items = NULL; + } + + g_hash_table_destroy(field->u.list.item_data); + + field->u.list.item_data = g_hash_table_new_full(g_str_hash, g_str_equal, + g_free, NULL); } void @@ -739,6 +751,7 @@ { g_list_foreach(field->u.list.selected, (GFunc)g_free, NULL); g_list_free(field->u.list.selected); + field->u.list.selected = NULL; } field->u.list.selected = items;