summaryrefslogtreecommitdiff
path: root/finch
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-10 17:17:53 -0600
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-10 17:17:53 -0600
commitccbb2c5906dbec65954745ae50fc6dcf32a66151 (patch)
treef93da8908f05e811b6612c63c086b414da32b936 /finch
parent376b58e87bd054fb09c73edcc31661110d7a2d97 (diff)
downloadpidgin-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.c12
-rw-r--r--finch/gntprefs.c19
-rw-r--r--finch/gntrequest.c70
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;
}