diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2023-03-10 17:17:53 -0600 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2023-03-10 17:17:53 -0600 |
commit | ccbb2c5906dbec65954745ae50fc6dcf32a66151 (patch) | |
tree | f93da8908f05e811b6612c63c086b414da32b936 /finch | |
parent | 376b58e87bd054fb09c73edcc31661110d7a2d97 (diff) | |
download | pidgin-ccbb2c5906dbec65954745ae50fc6dcf32a66151.tar.gz |
Convert PurpleRequestFieldList into a GObject
This also does an `hg cp`, though with all the renaming of the parameter names, maybe that wasn't as useful for tracking the diff.
Also could implement `GListModel`, but it takes arbitrary pointers too, so not right now.
Testing Done:
Compiled, and opened Request Fields from the Demo protocol.
Reviewed at https://reviews.imfreedom.org/r/2336/
Diffstat (limited to 'finch')
-rw-r--r-- | finch/gntplugin.c | 12 | ||||
-rw-r--r-- | finch/gntprefs.c | 19 | ||||
-rw-r--r-- | finch/gntrequest.c | 70 |
3 files changed, 51 insertions, 50 deletions
diff --git a/finch/gntplugin.c b/finch/gntplugin.c index 05930acc75..071869b6ff 100644 --- a/finch/gntplugin.c +++ b/finch/gntplugin.c @@ -581,7 +581,8 @@ process_pref_frame(PurplePluginPrefFrame *frame) } field = purple_request_field_list_new(name, label); - purple_request_field_list_set_multi_select(field, FALSE); + purple_request_field_list_set_multi_select(PURPLE_REQUEST_FIELD_LIST(field), + FALSE); for (GList *list = purple_plugin_pref_get_choices(pref); list != NULL; list = list->next) { const PurpleKeyValuePair *choice = list->data; char *value = NULL; @@ -599,9 +600,12 @@ process_pref_frame(PurplePluginPrefFrame *frame) break; } stringlist = g_list_prepend(stringlist, value); - purple_request_field_list_add_icon(field, choice->key, NULL, value); - if (purple_strequal(value, current_value)) - purple_request_field_list_add_selected(field, choice->key); + purple_request_field_list_add_icon(PURPLE_REQUEST_FIELD_LIST(field), + choice->key, NULL, value); + if(purple_strequal(value, current_value)) { + purple_request_field_list_add_selected(PURPLE_REQUEST_FIELD_LIST(field), + choice->key); + } } g_free(current_value); } else { diff --git a/finch/gntprefs.c b/finch/gntprefs.c index bf1aafb8e5..5e90070d73 100644 --- a/finch/gntprefs.c +++ b/finch/gntprefs.c @@ -153,11 +153,15 @@ get_pref_field(Prefs *prefs) } else { - GList *list = prefs->lv(), *iter; - if (list) + PurpleRequestFieldList *lfield = NULL; + GList *list = NULL; + + list = prefs->lv(); + if(list != NULL) { field = purple_request_field_list_new(prefs->pref, _(prefs->label)); - for (iter = list; iter; iter = iter->next) - { + lfield = PURPLE_REQUEST_FIELD_LIST(field); + } + for(GList *iter = list; iter; iter = iter->next) { gboolean select = FALSE; const char *data = iter->data; int idata; @@ -183,9 +187,10 @@ get_pref_field(Prefs *prefs) default: break; } - purple_request_field_list_add_icon(field, data, NULL, iter->data); - if (select) - purple_request_field_list_add_selected(field, data); + purple_request_field_list_add_icon(lfield, data, NULL, iter->data); + if(select) { + purple_request_field_list_add_selected(lfield, data); + } } g_list_free(list); } diff --git a/finch/gntrequest.c b/finch/gntrequest.c index ce1002a656..6c06435066 100644 --- a/finch/gntrequest.c +++ b/finch/gntrequest.c @@ -290,7 +290,6 @@ request_fields_cb(GntWidget *button, PurpleRequestPage *page) { for (; fields ; fields = fields->next) { PurpleRequestField *field = fields->data; - PurpleRequestFieldType type = purple_request_field_get_field_type(field); if (!purple_request_field_is_visible(field)) continue; if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { @@ -321,13 +320,11 @@ request_fields_cb(GntWidget *button, PurpleRequestPage *page) { gpointer value = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); purple_request_field_choice_set_value(PURPLE_REQUEST_FIELD_CHOICE(field), value); - } - else if (type == PURPLE_REQUEST_FIELD_LIST) - { + } else if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { + PurpleRequestFieldList *lfield = PURPLE_REQUEST_FIELD_LIST(field); GList *selected = NULL; - GList *list = purple_request_field_list_get_items(field); - if (purple_request_field_list_get_multi_select(field)) - { + GList *list = purple_request_field_list_get_items(lfield); + if(purple_request_field_list_get_multi_select(lfield)) { GntWidget *tree = g_object_get_data(G_OBJECT(field), "finch-ui-data"); @@ -335,7 +332,9 @@ request_fields_cb(GntWidget *button, PurpleRequestPage *page) { { PurpleKeyValuePair *item = list->data; const char *text = item->key; - gpointer key = purple_request_field_list_get_data(field, text); + gpointer key = NULL; + + key = purple_request_field_list_get_data(lfield, text); if (gnt_tree_get_choice(GNT_TREE(tree), key)) { selected = g_list_prepend(selected, (gpointer)text); } @@ -350,7 +349,9 @@ request_fields_cb(GntWidget *button, PurpleRequestPage *page) { for (; list; list = list->next) { PurpleKeyValuePair *item = list->data; const char *text = item->key; - gpointer key = purple_request_field_list_get_data(field, text); + gpointer key = NULL; + + key = purple_request_field_list_get_data(lfield, text); if (key == data) { selected = g_list_prepend(selected, (gpointer)text); break; @@ -358,7 +359,7 @@ request_fields_cb(GntWidget *button, PurpleRequestPage *page) { } } - purple_request_field_list_set_selected(field, selected); + purple_request_field_list_set_selected(lfield, selected); g_list_free(selected); } else if (PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { @@ -488,20 +489,22 @@ create_choice_field(PurpleRequestField *field) static GntWidget* create_list_field(PurpleRequestField *field) { + PurpleRequestFieldList *lfield = PURPLE_REQUEST_FIELD_LIST(field); GntWidget *ret = NULL; - GList *list = purple_request_field_list_get_items(field); - if (purple_request_field_list_get_multi_select(field)) { + GList *list = purple_request_field_list_get_items(lfield); + if(purple_request_field_list_get_multi_select(lfield)) { GntWidget *tree = gnt_tree_new(); for (; list; list = list->next) { PurpleKeyValuePair *item = list->data; const char *text = item->key; - gpointer key = purple_request_field_list_get_data(field, text); + gpointer key = purple_request_field_list_get_data(lfield, text); gnt_tree_add_choice(GNT_TREE(tree), key, gnt_tree_create_row(GNT_TREE(tree), text), NULL, NULL); - if (purple_request_field_list_is_selected(field, text)) + if(purple_request_field_list_is_selected(lfield, text)) { gnt_tree_set_choice(GNT_TREE(tree), key, TRUE); + } } ret = tree; } @@ -513,10 +516,11 @@ create_list_field(PurpleRequestField *field) { PurpleKeyValuePair *item = list->data; const char *text = item->key; - gpointer key = purple_request_field_list_get_data(field, text); + gpointer key = purple_request_field_list_get_data(lfield, text); gnt_combo_box_add_data(GNT_COMBO_BOX(combo), key, text); - if (purple_request_field_list_is_selected(field, text)) + if(purple_request_field_list_is_selected(lfield, text)) { gnt_combo_box_set_selected(GNT_COMBO_BOX(combo), key); + } } ret = combo; } @@ -641,7 +645,6 @@ finch_request_fields(const char *title, const char *primary, for (; fields ; fields = fields->next) { PurpleRequestField *field = fields->data; - PurpleRequestFieldType type = purple_request_field_get_field_type(field); const char *label = purple_request_field_get_label(field); GntWidget *widget = NULL; @@ -669,7 +672,7 @@ finch_request_fields(const char *title, const char *primary, widget = create_integer_field(field); } else if(PURPLE_IS_REQUEST_FIELD_CHOICE(field)) { widget = create_choice_field(field); - } else if (type == PURPLE_REQUEST_FIELD_LIST) { + } else if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { widget = create_list_field(field); } else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { accountlist = create_account_field(field); @@ -869,12 +872,15 @@ finch_request_save_in_prefs(G_GNUC_UNUSED gpointer data, for (; fields ; fields = fields->next) { PurpleRequestField *field = fields->data; - PurpleRequestFieldType type = purple_request_field_get_field_type(field); PurplePrefType pt; gpointer val = NULL; const char *id = purple_request_field_get_id(field); - if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { + if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { + PurpleRequestFieldList *lfield = PURPLE_REQUEST_FIELD_LIST(field); + val = purple_request_field_list_get_selected(lfield)->data; + val = purple_request_field_list_get_data(lfield, val); + } else if(PURPLE_IS_REQUEST_FIELD_BOOL(field)) { PurpleRequestFieldBool *bfield = PURPLE_REQUEST_FIELD_BOOL(field); val = GINT_TO_POINTER(purple_request_field_bool_get_value(bfield)); } else if(PURPLE_IS_REQUEST_FIELD_INT(field)) { @@ -883,15 +889,6 @@ finch_request_save_in_prefs(G_GNUC_UNUSED gpointer data, } else if(PURPLE_IS_REQUEST_FIELD_STRING(field)) { PurpleRequestFieldString *sfield = PURPLE_REQUEST_FIELD_STRING(field); val = (gpointer)purple_request_field_string_get_value(sfield); - } else { - 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; - default: - break; - } } pt = purple_prefs_get_pref_type(id); @@ -899,7 +896,7 @@ finch_request_save_in_prefs(G_GNUC_UNUSED gpointer data, case PURPLE_PREF_INT: { long int tmp = GPOINTER_TO_INT(val); - if (type == PURPLE_REQUEST_FIELD_LIST) { + if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { /* Lists always return string */ if (sscanf(val, "%ld", &tmp) != 1) tmp = 0; @@ -933,16 +930,11 @@ GntWidget *finch_request_field_get_widget(PurpleRequestField *field) ret = create_choice_field(field); } else if(PURPLE_IS_REQUEST_FIELD_ACCOUNT(field)) { ret = create_account_field(field); + } else if(PURPLE_IS_REQUEST_FIELD_LIST(field)) { + ret = create_list_field(field); } else { - switch (purple_request_field_get_field_type(field)) { - case PURPLE_REQUEST_FIELD_LIST: - ret = create_list_field(field); - break; - default: - purple_debug_error("GntRequest", "Unimplemented request-field %d\n", - purple_request_field_get_field_type(field)); - break; - } + purple_debug_error("GntRequest", "Unimplemented request-field %s", + G_OBJECT_TYPE_NAME(field)); } return ret; } |