| 982 PurpleActionMenu *action = purple_action_menu_new(label, callback, data, NULL); |
982 PurpleActionMenu *action = purple_action_menu_new(label, callback, data, NULL); |
| 983 finch_append_menu_action(menu, action, NULL); |
983 finch_append_menu_action(menu, action, NULL); |
| 984 } |
984 } |
| 985 |
985 |
| 986 static void |
986 static void |
| 987 chat_components_edit_ok(PurpleChat *chat, PurpleRequestPage *page) |
987 chat_components_edit_ok(PurpleChat *chat, PurpleRequestPage *page) { |
| 988 { |
988 guint n_groups; |
| 989 GList *groups, *fields; |
989 |
| 990 |
990 n_groups = g_list_model_get_n_items(G_LIST_MODEL(page)); |
| 991 for(groups = purple_request_page_get_groups(page); groups; |
991 for(guint group_index = 0; group_index < n_groups; group_index++) { |
| 992 groups = groups->next) |
992 GListModel *group = NULL; |
| 993 { |
993 guint n_fields = 0; |
| 994 fields = purple_request_group_get_fields(groups->data); |
994 |
| 995 for (; fields; fields = fields->next) { |
995 group = g_list_model_get_item(G_LIST_MODEL(page), group_index); |
| 996 PurpleRequestField *field = fields->data; |
996 n_fields = g_list_model_get_n_items(group); |
| |
997 for(guint field_index = 0; field_index < n_fields; field_index++) { |
| |
998 PurpleRequestField *field = NULL; |
| 997 const char *id; |
999 const char *id; |
| 998 char *val; |
1000 char *val; |
| 999 |
1001 |
| |
1002 field = g_list_model_get_item(group, field_index); |
| 1000 id = purple_request_field_get_id(field); |
1003 id = purple_request_field_get_id(field); |
| 1001 if(PURPLE_IS_REQUEST_FIELD_INT(field)) { |
1004 if(PURPLE_IS_REQUEST_FIELD_INT(field)) { |
| 1002 PurpleRequestFieldInt *ifield = PURPLE_REQUEST_FIELD_INT(field); |
1005 PurpleRequestFieldInt *ifield = PURPLE_REQUEST_FIELD_INT(field); |
| 1003 val = g_strdup_printf("%d", |
1006 val = g_strdup_printf("%d", |
| 1004 purple_request_field_int_get_value(ifield)); |
1007 purple_request_field_int_get_value(ifield)); |
| 1009 if (!val) { |
1012 if (!val) { |
| 1010 g_hash_table_remove(purple_chat_get_components(chat), id); |
1013 g_hash_table_remove(purple_chat_get_components(chat), id); |
| 1011 } else { |
1014 } else { |
| 1012 g_hash_table_replace(purple_chat_get_components(chat), g_strdup(id), val); /* val should not be free'd */ |
1015 g_hash_table_replace(purple_chat_get_components(chat), g_strdup(id), val); /* val should not be free'd */ |
| 1013 } |
1016 } |
| |
1017 |
| |
1018 g_object_unref(field); |
| 1014 } |
1019 } |
| |
1020 |
| |
1021 g_object_unref(group); |
| 1015 } |
1022 } |
| 1016 } |
1023 } |
| 1017 |
1024 |
| 1018 static void |
1025 static void |
| 1019 chat_components_edit(G_GNUC_UNUSED PurpleBlistNode *selected, PurpleChat *chat) |
1026 chat_components_edit(G_GNUC_UNUSED PurpleBlistNode *selected, PurpleChat *chat) |