summaryrefslogtreecommitdiff
path: root/finch/gntrequest.c
diff options
context:
space:
mode:
Diffstat (limited to 'finch/gntrequest.c')
-rw-r--r--finch/gntrequest.c19
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));