diff options
Diffstat (limited to 'finch/gntrequest.c')
-rw-r--r-- | finch/gntrequest.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/finch/gntrequest.c b/finch/gntrequest.c index 243c16e879..4ba5a279de 100644 --- a/finch/gntrequest.c +++ b/finch/gntrequest.c @@ -349,10 +349,9 @@ request_fields_cb(GntWidget *button, PurpleRequestFields *fields) } else if (type == PURPLE_REQUEST_FIELD_LIST) { - GList *list = NULL; + GList *list = NULL, *iter; if (purple_request_field_list_get_multi_select(field)) { - GList *iter; GntWidget *tree = FINCH_GET_DATA(field); iter = purple_request_field_list_get_items(field); @@ -361,14 +360,23 @@ request_fields_cb(GntWidget *button, PurpleRequestFields *fields) const char *text = iter->data; gpointer key = purple_request_field_list_get_data(field, text); if (gnt_tree_get_choice(GNT_TREE(tree), key)) - list = g_list_prepend(list, key); + list = g_list_prepend(list, (gpointer)text); } } else { GntWidget *combo = FINCH_GET_DATA(field); gpointer data = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); - list = g_list_append(list, data); + + iter = purple_request_field_list_get_items(field); + for (; iter; iter = iter->next) { + const char *text = iter->data; + gpointer key = purple_request_field_list_get_data(field, text); + if (key == data) { + list = g_list_prepend(list, (gpointer)text); + break; + } + } } purple_request_field_list_set_selected(field, list); @@ -815,7 +823,7 @@ void finch_request_save_in_prefs(gpointer null, PurpleRequestFields *allfields) for (list = purple_request_fields_get_groups(allfields); list; list = list->next) { PurpleRequestFieldGroup *group = list->data; GList *fields = purple_request_field_group_get_fields(group); - + for (; fields ; fields = fields->next) { PurpleRequestField *field = fields->data; PurpleRequestFieldType type = purple_request_field_get_type(field); @@ -826,6 +834,7 @@ void finch_request_save_in_prefs(gpointer null, PurpleRequestFields *allfields) switch (type) { case PURPLE_REQUEST_FIELD_LIST: val = purple_request_field_list_get_selected(field)->data; + val = purple_request_field_list_get_data(field, val); break; case PURPLE_REQUEST_FIELD_BOOLEAN: val = GINT_TO_POINTER(purple_request_field_bool_get_value(field)); |