--- a/ChangeLog.API Tue Mar 07 00:22:36 2023 -0600
+++ b/ChangeLog.API Tue Mar 07 01:04:42 2023 -0600
@@ -238,6 +238,8 @@
* PurpleRequestFieldGroup is now a GObject, and renamed to
PurpleRequestGroup. Please see the documentation for
+ * PurpleRequestFields is now a GObject, and renamed to + PurpleRequestPage. Please see the documentation for details. * purple_request_field_get_field_type_hint renamed to
purple_request_field_get_type_hint
* purple_request_field_group_get_tab
@@ -720,6 +722,7 @@
* purple_request_field_set_ui_data
* purple_request_field_group_destroy. Use g_object_unref
+ * purple_request_fields_destroy. Use g_object_unref instead. * purple_request_fields_get_autosensitive
* purple_roomlist_expand_category
--- a/finch/gntblist.c Tue Mar 07 00:22:36 2023 -0600
+++ b/finch/gntblist.c Tue Mar 07 01:04:42 2023 -0600
@@ -530,13 +530,12 @@
-add_buddy_cb(G_GNUC_UNUSED gpointer data, PurpleRequestFields *allfields)
- const char *username = purple_request_fields_get_string(allfields, "screenname");
- const char *alias = purple_request_fields_get_string(allfields, "alias");
- const char *group = purple_request_fields_get_string(allfields, "group");
- const char *invite = purple_request_fields_get_string(allfields, "invite");
- PurpleAccount *account = purple_request_fields_get_account(allfields, "account");
+add_buddy_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { + const char *username = purple_request_page_get_string(page, "screenname"); + const char *alias = purple_request_page_get_string(page, "alias"); + const char *group = purple_request_page_get_string(page, "group"); + const char *invite = purple_request_page_get_string(page, "invite"); + PurpleAccount *account = purple_request_page_get_account(page, "account"); const char *error = NULL;
@@ -582,11 +581,11 @@
PurpleAccount *account, const char *username,
const char *grp, const char *alias)
- PurpleRequestFields *fields = purple_request_fields_new();
+ PurpleRequestPage *page = purple_request_page_new(); PurpleRequestGroup *group = purple_request_group_new(NULL);
PurpleRequestField *field;
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("screenname", _("Username"), username, FALSE);
purple_request_group_add_field(group, field);
@@ -608,7 +607,7 @@
purple_request_group_add_field(group, field);
purple_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."),
_("Add"), G_CALLBACK(add_buddy_cb),
purple_request_cpar_from_account(account),
@@ -636,8 +635,7 @@
-add_chat_cb(G_GNUC_UNUSED gpointer data, PurpleRequestFields *allfields)
+add_chat_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { const char *alias, *name, *group;
@@ -647,11 +645,11 @@
PurpleProtocol *protocol;
- account = purple_request_fields_get_account(allfields, "account");
- name = purple_request_fields_get_string(allfields, "name");
- alias = purple_request_fields_get_string(allfields, "alias");
- group = purple_request_fields_get_string(allfields, "group");
- autojoin = purple_request_fields_get_bool(allfields, "autojoin");
+ account = purple_request_page_get_account(page, "account"); + name = purple_request_page_get_string(page, "name"); + alias = purple_request_page_get_string(page, "alias"); + group = purple_request_page_get_string(page, "group"); + autojoin = purple_request_page_get_bool(page, "autojoin"); if (!purple_account_is_connected(account) || !name || !*name)
@@ -684,11 +682,11 @@
PurpleAccount *account, PurpleGroup *grp,
const char *alias, const char *name)
- PurpleRequestFields *fields = purple_request_fields_new();
+ PurpleRequestPage *page = purple_request_page_new(); PurpleRequestGroup *group = purple_request_group_new(NULL);
PurpleRequestField *field;
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_account_new("account", _("Account"), NULL);
purple_request_field_account_set_show_all(field, FALSE);
@@ -711,7 +709,7 @@
purple_request_fields(NULL, _("Add Chat"), NULL,
_("You can edit more information from the context menu later."),
- fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL,
+ page, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL, @@ -980,11 +978,13 @@
-chat_components_edit_ok(PurpleChat *chat, PurpleRequestFields *allfields)
+chat_components_edit_ok(PurpleChat *chat, PurpleRequestPage *page) - for (groups = purple_request_fields_get_groups(allfields); groups; groups = groups->next) {
+ for(groups = purple_request_page_get_groups(page); groups; fields = purple_request_group_get_fields(groups->data);
for (; fields; fields = fields->next) {
PurpleRequestField *field = fields->data;
@@ -1009,7 +1009,7 @@
chat_components_edit(G_GNUC_UNUSED PurpleBlistNode *selected, PurpleChat *chat)
- PurpleRequestFields *fields = purple_request_fields_new();
+ PurpleRequestPage *page = purple_request_page_new(); PurpleRequestGroup *group = purple_request_group_new(NULL);
PurpleRequestField *field;
@@ -1017,7 +1017,7 @@
PurpleProtocolChatEntry *pce;
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); gc = purple_account_get_connection(purple_chat_get_account(chat));
protocol = purple_connection_get_protocol(gc);
@@ -1048,7 +1048,7 @@
purple_request_fields(NULL, _("Edit Chat"), NULL, _("Please Update the necessary fields."),
- fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL,
+ page, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL, @@ -2518,14 +2518,13 @@
/* send_im_select* -- Xerox */
-send_im_select_cb(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
+send_im_select_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { - account = purple_request_fields_get_account(fields, "account");
- username = purple_request_fields_get_string(fields, "screenname");
+ account = purple_request_page_get_account(page, "account"); + username = purple_request_page_get_string(page, "screenname"); im = purple_im_conversation_new(account, username);
purple_conversation_present(im);
@@ -2534,14 +2533,14 @@
send_im_select(G_GNUC_UNUSED GntMenuItem *item, G_GNUC_UNUSED gpointer n)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("screenname", _("Name"), NULL, FALSE);
purple_request_field_set_type_hint(field, "screenname");
@@ -2560,13 +2559,12 @@
purple_blist_get_default(), _("New Instant Message"), NULL,
_("Please enter the username or alias of the person "
"you would like to IM."),
- fields, _("OK"), G_CALLBACK(send_im_select_cb), _("Cancel"),
+ page, _("OK"), G_CALLBACK(send_im_select_cb), _("Cancel"), -join_chat_select_cb(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
+join_chat_select_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { @@ -2575,8 +2573,8 @@
PurpleConversation *conv;
- account = purple_request_fields_get_account(fields, "account");
- name = purple_request_fields_get_string(fields, "chat");
+ account = purple_request_page_get_account(page, "account"); + name = purple_request_page_get_string(page, "chat"); if (!purple_account_is_connected(account))
@@ -2610,14 +2608,14 @@
join_chat_select(G_GNUC_UNUSED GntMenuItem *item, G_GNUC_UNUSED gpointer n)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("chat", _("Channel"), NULL, FALSE);
purple_request_field_set_required(field, TRUE);
@@ -2634,7 +2632,7 @@
purple_blist_get_default(), _("Join a Chat"), NULL,
_("Please enter the name of the chat you want to join."),
- fields, _("Join"), G_CALLBACK(join_chat_select_cb), _("Cancel"),
+ page, _("Join"), G_CALLBACK(join_chat_select_cb), _("Cancel"), --- a/finch/gntplugin.c Tue Mar 07 00:22:36 2023 -0600
+++ b/finch/gntplugin.c Tue Mar 07 01:04:42 2023 -0600
@@ -534,13 +534,13 @@
process_pref_frame(PurplePluginPrefFrame *frame)
PurpleRequestField *field;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group = NULL;
GList *stringlist = NULL;
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); for (prefs = purple_plugin_pref_frame_get_prefs(frame); prefs; prefs = prefs->next) {
PurplePluginPref *pref = prefs->data;
@@ -556,7 +556,7 @@
purple_request_group_add_field(group, field);
group = purple_request_group_new(label);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); @@ -624,13 +624,13 @@
group = purple_request_group_new(_("Preferences"));
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); purple_request_group_add_field(group, field);
- ret = purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
+ ret = purple_request_fields(NULL, _("Preferences"), NULL, NULL, page, _("Save"), G_CALLBACK(finch_request_save_in_prefs), _("Cancel"), NULL,
g_signal_connect_swapped(G_OBJECT(ret), "destroy", G_CALLBACK(free_stringlist), stringlist);
--- a/finch/gntprefs.c Tue Mar 07 00:22:36 2023 -0600
+++ b/finch/gntprefs.c Tue Mar 07 01:04:42 2023 -0600
@@ -230,21 +230,19 @@
-save_cb(void *data, PurpleRequestFields *allfields)
- finch_request_save_in_prefs(data, allfields);
+save_cb(void *data, PurpleRequestPage *page) { + finch_request_save_in_prefs(data, page); -add_pref_group(PurpleRequestFields *fields, const char *title, Prefs *prefs)
+add_pref_group(PurpleRequestPage *page, const char *title, Prefs *prefs) { PurpleRequestField *field;
PurpleRequestGroup *group;
group = purple_request_group_new(title);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); for (i = 0; prefs[i].pref; i++)
field = get_pref_field(prefs + i);
@@ -256,22 +254,22 @@
finch_prefs_show_all(void)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; if (pref_request.showing) {
gnt_window_present(pref_request.window);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); - add_pref_group(fields, _("Buddy List"), blist);
- add_pref_group(fields, _("Conversations"), convs);
- add_pref_group(fields, _("Idle"), idle);
- add_pref_group(fields, _("Credentials"), credentials);
+ add_pref_group(page, _("Buddy List"), blist); + add_pref_group(page, _("Conversations"), convs); + add_pref_group(page, _("Idle"), idle); + add_pref_group(page, _("Credentials"), credentials); pref_request.showing = TRUE;
- pref_request.window = purple_request_fields(NULL, _("Preferences"), NULL, NULL, fields,
+ pref_request.window = purple_request_fields(NULL, _("Preferences"), NULL, NULL, page, _("Save"), G_CALLBACK(save_cb), _("Cancel"), free_strings,
--- a/finch/gntrequest.c Tue Mar 07 00:22:36 2023 -0600
+++ b/finch/gntrequest.c Tue Mar 07 01:04:42 2023 -0600
@@ -167,14 +167,8 @@
-finch_close_request(PurpleRequestType type, gpointer ui_handle)
+finch_close_request(G_GNUC_UNUSED PurpleRequestType type, gpointer ui_handle) { GntWidget *widget = GNT_WIDGET(ui_handle);
- if (type == PURPLE_REQUEST_FIELDS) {
- PurpleRequestFields *fields = g_object_get_data(G_OBJECT(widget), "fields");
- purple_request_fields_destroy(fields);
widget = gnt_widget_get_toplevel(widget);
gnt_widget_destroy(widget);
@@ -278,8 +272,7 @@
-request_fields_cb(GntWidget *button, PurpleRequestFields *fields)
+request_fields_cb(GntWidget *button, PurpleRequestPage *page) { PurpleRequestFieldsCb callback = g_object_get_data(G_OBJECT(button), "activate-callback");
gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata");
@@ -290,8 +283,7 @@
* instantly whenever a change is made. That allows it to make sure the
* 'required' fields are entered before the user can hit OK. It's not the case
* here, although it can be done. */
- for (list = purple_request_fields_get_groups(fields); list; list = list->next)
+ for(list = purple_request_page_get_groups(page); list; list = list->next) { PurpleRequestGroup *group = list->data;
GList *fields = purple_request_group_get_fields(group);
@@ -381,16 +373,17 @@
purple_notify_close_with_handle(button);
if (!g_object_get_data(G_OBJECT(button), "cancellation-function") &&
- (!purple_request_fields_all_required_filled(fields) ||
- !purple_request_fields_all_valid(fields))) {
+ (!purple_request_page_all_required_filled(page) || + !purple_request_page_all_valid(page))) { purple_notify_error(button, _("Error"),
_("You must properly fill all the required fields."),
_("The required fields are underlined."), NULL);
- callback(data, fields);
window = gnt_widget_get_toplevel(button);
purple_request_close(PURPLE_REQUEST_FIELDS, window);
@@ -583,8 +576,7 @@
-multifield_extra_cb(GntWidget *button, PurpleRequestFields *allfields)
+multifield_extra_cb(GntWidget *button, PurpleRequestPage *page) { PurpleRequestFieldsCb cb;
@@ -593,8 +585,9 @@
cb = g_object_get_data(G_OBJECT(button), "extra-cb");
cb_data = g_object_get_data(G_OBJECT(button), "extra-cb-data");
- cb(cb_data, allfields);
action_performed(button, handle);
purple_request_close(PURPLE_REQUEST_FIELDS, handle);
@@ -602,7 +595,7 @@
finch_request_fields(const char *title, const char *primary,
- const char *secondary, PurpleRequestFields *allfields,
+ const char *secondary, PurpleRequestPage *page, const char *ok, GCallback ok_cb,
const char *cancel, GCallback cancel_cb,
PurpleRequestCommonParameters *cpar,
@@ -623,7 +616,8 @@
box = gnt_vbox_new(FALSE);
gnt_box_set_pad(GNT_BOX(box), 0);
gnt_box_set_fill(GNT_BOX(box), TRUE);
- for (grlist = purple_request_fields_get_groups(allfields); grlist; grlist = grlist->next)
+ for(grlist = purple_request_page_get_groups(page); grlist; PurpleRequestGroup *group = grlist->data;
GList *fields = purple_request_group_get_fields(group);
@@ -684,8 +678,8 @@
gnt_box_add_widget(GNT_BOX(window), box);
- box = setup_button_box(window, userdata, request_fields_cb, allfields,
- ok, ok_cb, cancel, cancel_cb, NULL);
+ box = setup_button_box(window, userdata, request_fields_cb, page, + ok, ok_cb, cancel, cancel_cb, NULL); extra_actions = purple_request_cpar_get_extra_actions(cpar);
for (GSList *it = extra_actions; it; it = it->next) {
@@ -697,7 +691,7 @@
g_object_set_data(G_OBJECT(button), "extra-cb", extra_action->value);
g_object_set_data(G_OBJECT(button), "extra-cb-data", userdata);
g_signal_connect(G_OBJECT(button), "activate",
- G_CALLBACK(multifield_extra_cb), allfields);
+ G_CALLBACK(multifield_extra_cb), page); help_cb = purple_request_cpar_get_help_cb(cpar, &help_data);
@@ -717,7 +711,7 @@
g_signal_connect(username, "completion", G_CALLBACK(update_selected_account), accountlist);
- g_object_set_data(G_OBJECT(window), "fields", allfields);
+ g_object_set_data_full(G_OBJECT(window), "fields", page, g_object_unref); @@ -857,10 +851,10 @@
finch_request_save_in_prefs(G_GNUC_UNUSED gpointer data,
- PurpleRequestFields *allfields)
+ PurpleRequestPage *page) - for (list = purple_request_fields_get_groups(allfields); list; list = list->next) {
+ for(list = purple_request_page_get_groups(page); list; list = list->next) { PurpleRequestGroup *group = list->data;
GList *fields = purple_request_group_get_fields(group);
--- a/libpurple/account.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/account.c Tue Mar 07 01:04:42 2023 -0600
@@ -227,13 +227,12 @@
-request_password_ok_cb(PurpleAccount *account, PurpleRequestFields *fields)
+request_password_ok_cb(PurpleAccount *account, PurpleRequestPage *page) { - entry = purple_request_fields_get_string(fields, "password");
- remember = purple_request_fields_get_bool(fields, "remember");
+ entry = purple_request_page_get_string(page, "password"); + remember = purple_request_page_get_bool(page, "remember"); @@ -266,7 +265,7 @@
request_password_cancel_cb(PurpleAccount *account,
- G_GNUC_UNUSED PurpleRequestFields *fields)
+ G_GNUC_UNUSED PurpleRequestPage *page) /* Disable the account as the user has cancelled connecting */
purple_account_set_enabled(account, FALSE);
@@ -315,13 +314,12 @@
-change_password_cb(PurpleAccount *account, PurpleRequestFields *fields)
+change_password_cb(PurpleAccount *account, PurpleRequestPage *page) { const char *orig_pass, *new_pass_1, *new_pass_2;
- orig_pass = purple_request_fields_get_string(fields, "password");
- new_pass_1 = purple_request_fields_get_string(fields, "new_password_1");
- new_pass_2 = purple_request_fields_get_string(fields, "new_password_2");
+ orig_pass = purple_request_page_get_string(page, "password"); + new_pass_1 = purple_request_page_get_string(page, "new_password_1"); + new_pass_2 = purple_request_page_get_string(page, "new_password_2"); if (g_utf8_collate(new_pass_1, new_pass_2))
@@ -332,12 +330,12 @@
- if ((purple_request_fields_is_field_required(fields, "password") &&
- (orig_pass == NULL || *orig_pass == '\0')) ||
- (purple_request_fields_is_field_required(fields, "new_password_1") &&
- (new_pass_1 == NULL || *new_pass_1 == '\0')) ||
- (purple_request_fields_is_field_required(fields, "new_password_2") &&
- (new_pass_2 == NULL || *new_pass_2 == '\0')))
+ if((purple_request_page_is_field_required(page, "password") && + purple_strempty(orig_pass)) || + (purple_request_page_is_field_required(page, "new_password_1") && + purple_strempty(new_pass_1)) || + (purple_request_page_is_field_required(page, "new_password_2") && + purple_strempty(new_pass_2))) purple_notify_error(account, NULL,
_("Fill out all fields completely."), NULL,
@@ -1065,7 +1063,7 @@
PurpleRequestGroup *group;
PurpleRequestField *field;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; /* Close any previous password request windows */
purple_request_close_with_handle(account);
@@ -1074,9 +1072,9 @@
primary = g_strdup_printf(_("Enter password for %s (%s)"), username,
purple_account_get_protocol_name(account));
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("password", _("Enter Password"), NULL, FALSE);
purple_request_field_string_set_masked(field, TRUE);
@@ -1086,7 +1084,7 @@
field = purple_request_field_bool_new("remember", _("Save password"), FALSE);
purple_request_group_add_field(group, field);
- purple_request_fields(account, NULL, primary, NULL, fields, _("OK"),
+ purple_request_fields(account, NULL, primary, NULL, page, _("OK"), ok_cb, _("Cancel"), cancel_cb,
purple_request_cpar_from_account(account), user_data);
@@ -1095,7 +1093,7 @@
purple_account_request_change_password(PurpleAccount *account)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -1109,10 +1107,10 @@
protocol = purple_connection_get_protocol(gc);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("password", _("Original password"),
@@ -1144,7 +1142,7 @@
purple_request_fields(purple_account_get_connection(account), NULL,
primary, _("Please enter your current password and your new "
- "password."), fields, _("OK"), G_CALLBACK(change_password_cb),
+ "password."), page, _("OK"), G_CALLBACK(change_password_cb), _("Cancel"), NULL, purple_request_cpar_from_account(account),
--- a/libpurple/plugins/idle/idle.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/plugins/idle/idle.c Tue Mar 07 01:04:42 2023 -0600
@@ -83,11 +83,10 @@
-idle_action_ok(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
- PurpleAccount *acct = purple_request_fields_get_account(fields, "acct");
+idle_action_ok(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { + PurpleAccount *acct = purple_request_page_get_account(page, "acct"); PurpleContactInfo *info = PURPLE_CONTACT_INFO(acct);
- int tm = purple_request_fields_get_integer(fields, "mins");
+ int tm = purple_request_page_get_integer(page, "mins"); /* only add the account to the GList if it's not already been idled */
if(!unidle_filter(acct)) {
@@ -100,12 +99,11 @@
-idle_all_action_ok(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
+idle_all_action_ok(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { PurpleAccountManager *manager = NULL;
PurpleAccount *acct = NULL;
- int tm = purple_request_fields_get_integer(fields, "mins");
+ int tm = purple_request_page_get_integer(page, "mins"); manager = purple_account_manager_get_default();
list = purple_account_manager_get_enabled(manager);
@@ -129,9 +127,8 @@
-unidle_action_ok(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
- PurpleAccount *acct = purple_request_fields_get_account(fields, "acct");
+unidle_action_ok(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { + PurpleAccount *acct = purple_request_page_get_account(page, "acct"); set_idle_time(acct, 0); /* unidle the account */
@@ -158,7 +155,7 @@
/* Use the super fancy request API */
- PurpleRequestFields *request;
+ PurpleRequestPage *request; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -172,8 +169,8 @@
field = purple_request_field_int_new("mins", _("Minutes"), 10, 0, 9999);
purple_request_group_add_field(group, field);
- request = purple_request_fields_new();
- purple_request_fields_add_group(request, group);
+ request = purple_request_page_new(); + purple_request_page_add_group(request, group); purple_request_fields(data,
@@ -190,7 +187,7 @@
G_GNUC_UNUSED GVariant *parameter,
- PurpleRequestFields *request;
+ PurpleRequestPage *request; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -207,8 +204,8 @@
purple_request_field_account_set_show_all(field, FALSE);
purple_request_group_add_field(group, field);
- request = purple_request_fields_new();
- purple_request_fields_add_group(request, group);
+ request = purple_request_page_new(); + purple_request_page_add_group(request, group); purple_request_fields(data,
@@ -225,7 +222,7 @@
G_GNUC_UNUSED GVariant *parameter,
- PurpleRequestFields *request;
+ PurpleRequestPage *request; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -234,8 +231,8 @@
field = purple_request_field_int_new("mins", _("Minutes"), 10, 0, 9999);
purple_request_group_add_field(group, field);
- request = purple_request_fields_new();
- purple_request_fields_add_group(request, group);
+ request = purple_request_page_new(); + purple_request_page_add_group(request, group); purple_request_fields(data,
--- a/libpurple/protocols/demo/purpledemoprotocolactions.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/demo/purpledemoprotocolactions.c Tue Mar 07 01:04:42 2023 -0600
@@ -367,7 +367,7 @@
purple_demo_protocol_request_fields_ok_cb(G_GNUC_UNUSED gpointer data,
- PurpleRequestFields *fields)
+ PurpleRequestPage *page) PurpleAccount *account = NULL;
PurpleRequestField *field = NULL;
@@ -378,30 +378,30 @@
info = g_string_new(_("Basic group:\n"));
g_string_append_printf(info, _("\tString: %s\n"),
- purple_request_fields_get_string(fields, "string"));
+ purple_request_page_get_string(page, "string")); g_string_append_printf(info, _("\tMultiline string: %s\n"),
- purple_request_fields_get_string(fields,
+ purple_request_page_get_string(page, g_string_append_printf(info, _("\tMasked string: %s\n"),
- purple_request_fields_get_string(fields,
+ purple_request_page_get_string(page, g_string_append_printf(info, _("\tAlphanumeric string: %s\n"),
- purple_request_fields_get_string(fields,
+ purple_request_page_get_string(page, g_string_append_printf(info, _("\tEmail string: %s\n"),
- purple_request_fields_get_string(fields, "email"));
+ purple_request_page_get_string(page, "email")); g_string_append_printf(info, _("\tInteger: %d\n"),
- purple_request_fields_get_integer(fields, "int"));
+ purple_request_page_get_integer(page, "int")); g_string_append_printf(info, _("\tBoolean: %s\n"),
- purple_request_fields_get_bool(fields, "bool") ?
+ purple_request_page_get_bool(page, "bool") ? g_string_append(info, _("Multiple-choice group:\n"));
- tmp = (const char *)purple_request_fields_get_choice(fields, "choice");
+ tmp = (const char *)purple_request_page_get_choice(page, "choice"); g_string_append_printf(info, _("\tChoice: %s\n"), tmp);
- field = purple_request_fields_get_field(fields, "list");
+ field = purple_request_page_get_field(page, "list"); list = purple_request_field_list_get_selected(field);
tmp = (const char *)list->data;
@@ -410,7 +410,7 @@
g_string_append_printf(info, _("\tList: %s\n"), tmp);
- field = purple_request_fields_get_field(fields, "multilist");
+ field = purple_request_page_get_field(page, "multilist"); list = purple_request_field_list_get_selected(field);
g_string_append(info, _("\tMulti-list: ["));
@@ -423,7 +423,7 @@
g_string_append(info, _("Special group:\n"));
- account = purple_request_fields_get_account(fields, "account");
+ account = purple_request_page_get_account(page, "account"); if(PURPLE_IS_ACCOUNT(account)) {
tmp = purple_contact_info_get_name_for_display(PURPLE_CONTACT_INFO(account));
@@ -438,7 +438,7 @@
purple_demo_protocol_request_fields_cancel_cb(G_GNUC_UNUSED gpointer data,
- G_GNUC_UNUSED PurpleRequestFields *fields)
+ G_GNUC_UNUSED PurpleRequestPage *page) g_message(_("UI cancelled field request"));
@@ -452,7 +452,7 @@
const gchar *account_id = NULL;
PurpleAccountManager *manager = NULL;
PurpleAccount *account = NULL;
- PurpleRequestFields *fields = NULL;
+ PurpleRequestPage *page = NULL; PurpleRequestGroup *group = NULL;
PurpleRequestField *field = NULL;
@@ -470,11 +470,11 @@
account = purple_account_manager_find_by_id(manager, account_id);
connection = purple_account_get_connection(account);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); /* This group will contain basic fields. */
group = purple_request_group_new(_("Basic"));
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_label_new("basic-label",
_("This group contains basic fields"));
@@ -512,7 +512,7 @@
/* This group will contain fields with multiple options. */
group = purple_request_group_new(_("Multiple"));
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_label_new("multiple-label",
_("This group contains fields with multiple options"));
@@ -542,7 +542,7 @@
/* This group will contain specialized fields. */
group = purple_request_group_new(_("Special"));
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_label_new("special-label",
_("This group contains specialized fields"));
@@ -562,7 +562,7 @@
purple_request_group_add_field(group, field);
purple_request_fields(connection, _("Request Fields Demo"),
- _("Please fill out these fields…"), NULL, fields,
+ _("Please fill out these fields…"), NULL, page, G_CALLBACK(purple_demo_protocol_request_fields_ok_cb),
--- a/libpurple/protocols/facebook/util.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/facebook/util.c Tue Mar 07 01:04:42 2023 -0600
@@ -295,8 +295,7 @@
-fb_util_request_buddy_ok(gpointer *request_data, PurpleRequestFields *fields)
+fb_util_request_buddy_ok(gpointer *request_data, PurpleRequestPage *page) { FbUtilRequestBuddyFunc func = request_data[0];
@@ -310,7 +309,7 @@
- field = purple_request_fields_get_field(fields, "buddy");
+ field = purple_request_page_get_field(page, "buddy"); select = purple_request_field_list_get_selected(field);
for (l = select; l != NULL; l = l->next) {
@@ -327,7 +326,7 @@
fb_util_request_buddy_cancel(gpointer *request_data,
- G_GNUC_UNUSED PurpleRequestFields *fields)
+ G_GNUC_UNUSED PurpleRequestPage *page) FbUtilRequestBuddyFunc func = request_data[1];
gpointer data = request_data[2];
@@ -382,7 +381,7 @@
PurpleRequestCommonParameters *cpar;
PurpleRequestField *field;
PurpleRequestGroup *group;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; request_data = g_new0(gpointer, 3);
@@ -393,9 +392,9 @@
buddies = purple_blist_find_buddies(acct, NULL);
buddies = g_slist_sort(buddies, fb_buddy_cmp);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_list_new("buddy", NULL);
purple_request_field_list_set_multi_select(field, multi);
@@ -422,7 +421,7 @@
g_list_free_full(items, g_free);
cpar = purple_request_cpar_from_connection(gc);
- return purple_request_fields(gc, title, primary, secondary, fields,
+ return purple_request_fields(gc, title, primary, secondary, page, G_CALLBACK(fb_util_request_buddy_ok),
--- a/libpurple/protocols/gg/multilogon.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/gg/multilogon.c Tue Mar 07 01:04:42 2023 -0600
@@ -217,7 +217,7 @@
ggp_multilogon_session_data *mldata = ggp_multilogon_get_mldata(gc);
PurpleRequestField *field;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestCommonParameters *cpar;
PurpleRequestDatasheet *sheet;
@@ -227,9 +227,9 @@
if (mldata->dialog_handle != NULL)
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); sheet = purple_request_datasheet_new();
purple_request_datasheet_add_column(sheet,
@@ -253,7 +253,7 @@
purple_request_cpar_set_icon(cpar, PURPLE_REQUEST_ICON_DIALOG);
dialog_handle = purple_request_fields(gc,
- _("Other Gadu-Gadu sessions"), NULL, NULL, fields,
+ _("Other Gadu-Gadu sessions"), NULL, NULL, page, NULL, NULL, _("Close"), NULL,
mldata->sheet_handle = sheet;
--- a/libpurple/protocols/gg/pubdir-prpl.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/gg/pubdir-prpl.c Tue Mar 07 01:04:42 2023 -0600
@@ -727,16 +727,15 @@
-ggp_pubdir_search_request(PurpleConnection *gc, PurpleRequestFields *fields)
+ggp_pubdir_search_request(PurpleConnection *gc, PurpleRequestPage *page) { ggp_pubdir_search_form *form = g_new0(ggp_pubdir_search_form, 1);
purple_debug_info("gg", "ggp_pubdir_search_request");
- form->nick = g_strdup(purple_request_fields_get_string(fields, "name"));
- form->city = g_strdup(purple_request_fields_get_string(fields, "city"));
+ form->nick = g_strdup(purple_request_page_get_string(page, "name")); + form->city = g_strdup(purple_request_page_get_string(page, "city")); - GPOINTER_TO_INT(purple_request_fields_get_choice(fields, "gender"));
+ GPOINTER_TO_INT(purple_request_page_get_choice(page, "gender")); form->limit = GGP_PUBDIR_SEARCH_PER_PAGE;
@@ -747,15 +746,15 @@
ggp_pubdir_search(PurpleConnection *gc, const ggp_pubdir_search_form *form)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
purple_debug_info("gg", "ggp_pubdir_search");
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("name", _("Name"),
form ? form->nick : NULL, FALSE);
@@ -775,7 +774,7 @@
purple_request_group_add_field(group, field);
purple_request_fields(gc, _("Find buddies"), _("Find buddies"),
- _("Please, enter your search criteria below"), fields,
+ _("Please, enter your search criteria below"), page, _("OK"), G_CALLBACK(ggp_pubdir_search_request),
purple_request_cpar_from_connection(gc), gc);
@@ -892,7 +891,7 @@
-ggp_pubdir_set_info_request(PurpleConnection *gc, PurpleRequestFields *fields)
+ggp_pubdir_set_info_request(PurpleConnection *gc, PurpleRequestPage *page) PurpleAccount *account = purple_connection_get_account(gc);
PurpleContactInfo *info = PURPLE_CONTACT_INFO(account);
@@ -904,24 +903,23 @@
purple_debug_info("gg", "ggp_pubdir_set_info_request");
- g_strdup(purple_request_fields_get_string(fields, "first_name"));
- g_strdup(purple_request_fields_get_string(fields, "last_name"));
- GPOINTER_TO_INT(purple_request_fields_get_choice(fields, "gender"));
- record->city = g_strdup(purple_request_fields_get_string(fields, "city"));
- record->province = GPOINTER_TO_INT(
- purple_request_fields_get_choice(fields, "province"));
+ record->first_name = g_strdup(purple_request_page_get_string(page, + record->last_name = g_strdup(purple_request_page_get_string(page, + record->gender = GPOINTER_TO_INT(purple_request_page_get_choice(page, + record->city = g_strdup(purple_request_page_get_string(page, "city")); + record->province = GPOINTER_TO_INT(purple_request_page_get_choice(page, - birth_s = g_strdup_printf(
- purple_request_fields_get_string(fields, "birth_date"));
+ birth_s = g_strdup_printf("%sT10:00:00+00:00", + purple_request_page_get_string(page, "birth_date")); record->birth = g_date_time_new_from_iso8601(birth_s, NULL);
purple_debug_info("gg", "ggp_pubdir_set_info_request: birth [%lu][%s]",
g_date_time_to_unix(record->birth),
- purple_request_fields_get_string(fields, "birth_date"));
+ purple_request_page_get_string(page, "birth_date")); url = g_strdup_printf("http://api.gadu-gadu.pl/users/%u.xml", uin);
ggp_oauth_request(gc, ggp_pubdir_set_info_got_token, record, "PUT", url);
@@ -934,7 +932,7 @@
G_GNUC_UNUSED int next_offset,
G_GNUC_UNUSED gpointer data)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -946,9 +944,9 @@
record = (records_count == 1 ? &records[0] : NULL);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("first_name", _("First name"),
record ? record->first_name : NULL,
@@ -1005,7 +1003,7 @@
purple_request_fields(gc, _("Set User Info"), _("Set User Info"), NULL,
G_CALLBACK(ggp_pubdir_set_info_request), _("Cancel"),
NULL, purple_request_cpar_from_connection(gc), gc);
--- a/libpurple/protocols/gg/status.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/gg/status.c Tue Mar 07 01:04:42 2023 -0600
@@ -204,11 +204,6 @@
******************************************************************************/
-static void ggp_status_broadcasting_dialog_ok(PurpleConnection *gc,
- PurpleRequestFields *fields);
-/******************************************************************************/
void ggp_status_set_initial(PurpleConnection *gc, struct gg_login_params *glp)
ggp_status_session_data *ssdata = ggp_status_get_ssdata(gc);
@@ -339,15 +334,23 @@
purple_account_get_active_status(account));
+ggp_status_broadcasting_dialog_ok(PurpleConnection *gc, + PurpleRequestPage *page) + gboolean buddies_only = purple_request_page_get_bool(page, "buddies_only"); + ggp_status_set_status_broadcasting(gc, !buddies_only); void ggp_status_broadcasting_dialog(PurpleConnection *gc)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_bool_new("buddies_only",
_("Show status only for buddies"),
@@ -358,19 +361,12 @@
_("Change status broadcasting"),
_("Please, select who can see your status"),
_("OK"), G_CALLBACK(ggp_status_broadcasting_dialog_ok),
purple_request_cpar_from_connection(gc), gc);
-static void ggp_status_broadcasting_dialog_ok(PurpleConnection *gc,
- PurpleRequestFields *fields)
- ggp_status_set_status_broadcasting(gc,
- !purple_request_fields_get_bool(fields, "buddies_only"));
/*******************************************************************************
******************************************************************************/
--- a/libpurple/protocols/jabber/buddy.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/jabber/buddy.c Tue Mar 07 01:04:42 2023 -0600
@@ -555,8 +555,7 @@
* Sets the vCard with data from PurpleRequestFields.
-jabber_format_info(PurpleConnection *gc, PurpleRequestFields *fields)
+jabber_format_info(PurpleConnection *gc, PurpleRequestPage *page) { PurpleRequestField *field;
PurpleProtocol *protocol = NULL;
@@ -574,7 +573,7 @@
if (*vc_tp->label == '\0')
- field = purple_request_fields_get_field(fields, vc_tp->tag);
+ field = purple_request_page_get_field(page, vc_tp->tag); text = purple_request_field_string_get_value(field);
@@ -619,7 +618,7 @@
PurpleAccountManager *manager = NULL;
PurpleAccount *account = NULL;
PurpleConnection *connection = NULL;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
const struct vcard_template *vc_tp;
@@ -637,9 +636,9 @@
account = purple_account_manager_find_by_id(manager, account_id);
connection = purple_account_get_connection(account);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); * Get existing, XML-formatted, user info
@@ -691,7 +690,7 @@
_("All items below are optional. Enter only the "
"information with which you feel comfortable."),
_("Save"), G_CALLBACK(jabber_format_info),
purple_request_cpar_from_connection(connection),
--- a/libpurple/protocols/jabber/jabber.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/jabber/jabber.c Tue Mar 07 01:04:42 2023 -0600
@@ -1861,15 +1861,14 @@
-static void jabber_password_change_cb(JabberStream *js,
- PurpleRequestFields *fields)
+jabber_password_change_cb(JabberStream *js, PurpleRequestPage *page) { PurpleXmlNode *query, *y;
- p1 = purple_request_fields_get_string(fields, "password1");
- p2 = purple_request_fields_get_string(fields, "password2");
+ p1 = purple_request_page_get_string(page, "password1"); + p2 = purple_request_page_get_string(page, "password2"); if(!purple_strequal(p1, p2)) {
purple_notify_error(js->gc, NULL,
@@ -1903,7 +1902,7 @@
PurpleAccount *account = NULL;
PurpleConnection *connection = NULL;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -1918,9 +1917,9 @@
connection = purple_account_get_connection(account);
js = purple_connection_get_protocol_data(connection);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("password1", _("Password"),
@@ -1937,7 +1936,7 @@
purple_request_fields(connection, _("Change XMPP Password"),
_("Change XMPP Password"),
_("Please enter your new password"),
_("OK"), G_CALLBACK(jabber_password_change_cb),
purple_request_cpar_from_connection(connection), js);
@@ -2613,17 +2612,15 @@
jabber_media_cancel_cb(JabberMediaRequest *request,
- G_GNUC_UNUSED PurpleRequestFields *fields)
+ G_GNUC_UNUSED PurpleRequestPage *page) -jabber_media_ok_cb(JabberMediaRequest *request, PurpleRequestFields *fields)
- PurpleRequestField *field =
- purple_request_fields_get_field(fields, "resource");
+jabber_media_ok_cb(JabberMediaRequest *request, PurpleRequestPage *page) { + PurpleRequestField *field = purple_request_page_get_field(page, "resource"); const gchar *selected = purple_request_field_choice_get_value(field);
gchar *who = g_strdup_printf("%s/%s", request->who, selected);
jabber_initiate_media(request->media, request->account, who, request->type);
@@ -2697,12 +2694,12 @@
* we need to pick one to initiate with */
- PurpleRequestFields *fields;
- PurpleRequestField *field = purple_request_field_choice_new(
- "resource", _("Resource"), 0);
- PurpleRequestGroup *group;
+ PurpleRequestPage *page = NULL; + PurpleRequestField *field = NULL; + PurpleRequestGroup *group = NULL; JabberMediaRequest *request;
+ field = purple_request_field_choice_new("resource", _("Resource"), 0); for(l = jb->resources; l; l = l->next)
JabberBuddyResource *ljbr = l->data;
@@ -2750,7 +2747,7 @@
msg = g_strdup_printf(_("Please select the resource of %s with which you would like to start a media session."), who);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
request = g_new0(JabberMediaRequest, 1);
@@ -2759,9 +2756,9 @@
purple_request_group_add_field(group, field);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); purple_request_fields(account, _("Select a Resource"), msg,
- NULL, fields, _("Initiate Media"),
+ NULL, page, _("Initiate Media"), G_CALLBACK(jabber_media_ok_cb), _("Cancel"),
G_CALLBACK(jabber_media_cancel_cb),
purple_request_cpar_from_account(account),
--- a/libpurple/protocols/jabber/si.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/jabber/si.c Tue Mar 07 01:04:42 2023 -0600
@@ -1469,7 +1469,7 @@
resource_select_cancel_cb(PurpleXfer *xfer,
- G_GNUC_UNUSED PurpleRequestFields *fields)
+ G_GNUC_UNUSED PurpleRequestPage *page) purple_xfer_cancel_local(xfer);
@@ -1516,9 +1516,10 @@
-static void resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestFields *fields)
+resource_select_ok_cb(PurpleXfer *xfer, PurpleRequestPage *page) - PurpleRequestField *field = purple_request_fields_get_field(fields, "resource");
+ PurpleRequestField *field = purple_request_page_get_field(page, "resource"); const char *selected_label = purple_request_field_choice_get_value(field);
do_transfer_send(xfer, selected_label);
@@ -1587,7 +1588,7 @@
/* we've got multiple resources, we need to pick one to send to */
char *msg = g_strdup_printf(_("Please select the resource of %s to which you would like to send a file"), purple_xfer_get_remote_user(xfer));
- PurpleRequestFields *fields = purple_request_fields_new();
+ PurpleRequestPage *page = purple_request_page_new(); PurpleRequestField *field = purple_request_field_choice_new("resource", _("Resource"), 0);
PurpleRequestGroup *group = purple_request_group_new(NULL);
@@ -1598,9 +1599,9 @@
purple_request_group_add_field(group, field);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); - purple_request_fields(jsx->js->gc, _("Select a Resource"), msg, NULL, fields,
+ purple_request_fields(jsx->js->gc, _("Select a Resource"), msg, NULL, page, _("Send File"), G_CALLBACK(resource_select_ok_cb), _("Cancel"), G_CALLBACK(resource_select_cancel_cb),
purple_request_cpar_from_connection(jsx->js->gc), xfer);
--- a/libpurple/protocols/jabber/xdata.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/protocols/jabber/xdata.c Tue Mar 07 01:04:42 2023 -0600
@@ -47,7 +47,8 @@
PurpleRequestGroup *actiongroup;
-static void jabber_x_data_ok_cb(struct jabber_x_data_data *data, PurpleRequestFields *fields) {
+jabber_x_data_ok_cb(struct jabber_x_data_data *data, PurpleRequestPage *page) { PurpleXmlNode *result = purple_xmlnode_new("x");
gpointer user_data = data->user_data;
@@ -59,7 +60,7 @@
purple_xmlnode_set_namespace(result, "jabber:x:data");
purple_xmlnode_set_attrib(result, "type", "submit");
- for(groups = purple_request_fields_get_groups(fields); groups; groups = groups->next) {
+ for(groups = purple_request_page_get_groups(page); groups; groups = groups->next) { if(groups->data == data->actiongroup) {
for(flds = purple_request_group_get_fields(groups->data); flds; flds = flds->next) {
PurpleRequestField *field = flds->data;
@@ -157,7 +158,7 @@
jabber_x_data_cancel_cb(struct jabber_x_data_data *data,
- G_GNUC_UNUSED PurpleRequestFields *fields)
+ G_GNUC_UNUSED PurpleRequestPage *page) PurpleXmlNode *result = purple_xmlnode_new("x");
@@ -190,7 +191,7 @@
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field = NULL;
@@ -204,9 +205,9 @@
data->cb = G_CALLBACK(cb);
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); for(fn = purple_xmlnode_get_child(packet, "field"); fn; fn = purple_xmlnode_get_next_twin(fn)) {
PurpleXmlNode *valuenode;
@@ -366,7 +367,7 @@
data->actiongroup = group = purple_request_group_new(_("Actions"));
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); actionfield = purple_request_field_choice_new("libpurple:jabber:xdata:actions", _("Select an action"), GINT_TO_POINTER(defaultaction));
for(i = 0, action = actions; action; action = g_list_next(action), i++) {
@@ -385,7 +386,7 @@
if((x = purple_xmlnode_get_child(packet, "instructions")))
instructions = purple_xmlnode_get_data(x);
- handle = purple_request_fields(js->gc, title, title, instructions, fields,
+ handle = purple_request_fields(js->gc, title, title, instructions, page, _("OK"), G_CALLBACK(jabber_x_data_ok_cb),
_("Cancel"), G_CALLBACK(jabber_x_data_cancel_cb),
purple_request_cpar_from_connection(js->gc),
--- a/libpurple/purplechatconversation.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/purplechatconversation.c Tue Mar 07 01:04:42 2023 -0600
@@ -1035,7 +1035,7 @@
-invite_user_to_chat(gpointer data, PurpleRequestFields *fields) {
+invite_user_to_chat(gpointer data, PurpleRequestPage *page) { PurpleChatConversation *chat;
PurpleChatConversationPrivate *priv;
@@ -1044,8 +1044,8 @@
chat = PURPLE_CHAT_CONVERSATION(data);
priv = purple_chat_conversation_get_instance_private(chat);
- user = purple_request_fields_get_string(fields, "screenname");
- message = purple_request_fields_get_string(fields, "message");
+ user = purple_request_page_get_string(page, "screenname"); + message = purple_request_page_get_string(page, "message"); pc = purple_conversation_get_connection(PURPLE_CONVERSATION(chat));
purple_serv_chat_invite(pc, priv->id, message, user);
@@ -1057,7 +1057,7 @@
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
@@ -1076,9 +1076,9 @@
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(_("Invite to chat"));
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("screenname", _("Buddy"), user,
@@ -1093,7 +1093,7 @@
purple_request_fields(chat, _("Invite to chat"), NULL,
_("Please enter the name of the user you wish to "
"invite, along with an optional invite message."),
_("Invite"), G_CALLBACK(invite_user_to_chat),
purple_request_cpar_from_conversation(PURPLE_CONVERSATION(chat)),
--- a/libpurple/purplerequestgroup.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/purplerequestgroup.c Tue Mar 07 01:04:42 2023 -0600
@@ -28,7 +28,7 @@
struct _PurpleRequestGroup {
- PurpleRequestFields *fields_list;
+ PurpleRequestPage *page; @@ -171,12 +171,12 @@
-_purple_request_group_set_field_list(PurpleRequestGroup *group,
- PurpleRequestFields *fields)
+_purple_request_group_set_page(PurpleRequestGroup *group, + PurpleRequestPage *page) g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
- group->fields_list = fields;
@@ -186,8 +186,7 @@
g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
- _purple_request_field_list_set_field_required(group->fields_list, field,
+ _purple_request_page_set_field_required(group->page, field, required); @@ -197,8 +196,7 @@
g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
- _purple_request_field_list_set_field_validator(group->fields_list, field,
+ _purple_request_page_set_field_validator(group->page, field, validator); @@ -213,8 +211,8 @@
position = g_list_length(group->fields);
group->fields = g_list_append(group->fields, field);
- if(group->fields_list != NULL) {
- _purple_request_field_list_add_field(group->fields_list, field);
+ if(PURPLE_IS_REQUEST_PAGE(group->page)) { + _purple_request_page_add_field(group->page, field); _purple_request_field_set_group(field, group);
@@ -238,10 +236,10 @@
-purple_request_group_get_fields_list(PurpleRequestGroup *group)
+purple_request_group_get_page(PurpleRequestGroup *group) g_return_val_if_fail(PURPLE_IS_REQUEST_GROUP(group), NULL);
- return group->fields_list;
--- a/libpurple/purplerequestpage.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/purplerequestpage.c Tue Mar 07 01:04:42 2023 -0600
@@ -25,8 +25,9 @@
#include "purplerequestpage.h"
#include "purpleprivate.h"
-struct _PurpleRequestFields
+struct _PurpleRequestPage { @@ -38,92 +39,134 @@
-purple_request_fields_new(void)
- PurpleRequestFields *fields;
+/****************************************************************************** + * GListModel Implementation + *****************************************************************************/ +purple_request_page_get_item_type(G_GNUC_UNUSED GListModel *model) { + return PURPLE_TYPE_REQUEST_GROUP; +purple_request_page_get_n_items(GListModel *model) { + PurpleRequestPage *page = PURPLE_REQUEST_PAGE(model); + return g_list_length(page->groups); +purple_request_page_get_item(GListModel *model, guint index) { + PurpleRequestPage *page = PURPLE_REQUEST_PAGE(model); + return g_list_nth_data(page->groups, index); +purple_request_page_list_model_init(GListModelInterface *iface) { + iface->get_item_type = purple_request_page_get_item_type; + iface->get_item = purple_request_page_get_item; + iface->get_n_items = purple_request_page_get_n_items; - fields = g_new0(PurpleRequestFields, 1);
+/****************************************************************************** + * GObject Implementation + *****************************************************************************/ +G_DEFINE_TYPE_WITH_CODE(PurpleRequestPage, purple_request_page, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE(G_TYPE_LIST_MODEL, + purple_request_page_list_model_init)) +purple_request_page_finalize(GObject *obj) { + PurpleRequestPage *page = PURPLE_REQUEST_PAGE(obj); + g_list_free_full(page->groups, g_object_unref); + g_list_free(page->required_fields); + g_list_free(page->validated_fields); + g_hash_table_destroy(page->fields); + G_OBJECT_CLASS(purple_request_page_parent_class)->finalize(obj); - fields->fields = g_hash_table_new_full(g_str_hash, g_str_equal,
+purple_request_page_init(PurpleRequestPage *page) { + page->fields = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); +purple_request_page_class_init(PurpleRequestPageClass *klass) { + GObjectClass *obj_class = G_OBJECT_CLASS(klass);
+ obj_class->finalize = purple_request_page_finalize; +/****************************************************************************** + *****************************************************************************/ +purple_request_page_new(void) { + return g_object_new(PURPLE_TYPE_REQUEST_PAGE, NULL); -purple_request_fields_destroy(PurpleRequestFields *fields)
+_purple_request_page_set_field_required(PurpleRequestPage *page, + PurpleRequestField *field, - g_return_if_fail(fields != NULL);
- g_list_free_full(fields->groups, g_object_unref);
- g_list_free(fields->required_fields);
- g_list_free(fields->validated_fields);
- g_hash_table_destroy(fields->fields);
-_purple_request_field_list_set_field_required(PurpleRequestFields *fields,
- PurpleRequestField *field,
- g_return_if_fail(fields != NULL);
+ g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page)); - fields->required_fields = g_list_append(fields->required_fields, field);
+ page->required_fields = g_list_append(page->required_fields, field); - fields->required_fields = g_list_remove(fields->required_fields, field);
+ page->required_fields = g_list_remove(page->required_fields, field); -_purple_request_field_list_set_field_validator(PurpleRequestFields *fields,
- PurpleRequestField *field,
+_purple_request_page_set_field_validator(PurpleRequestPage *page, + PurpleRequestField *field, - g_return_if_fail(fields != NULL);
+ g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page)); - fields->validated_fields = g_list_remove(fields->validated_fields, field);
+ page->validated_fields = g_list_remove(page->validated_fields, field); - fields->validated_fields = g_list_append(fields->validated_fields,
+ page->validated_fields = g_list_append(page->validated_fields, field); -_purple_request_field_list_add_field(PurpleRequestFields *fields,
- PurpleRequestField *field)
+_purple_request_page_add_field(PurpleRequestPage *page, + PurpleRequestField *field) - g_return_if_fail(fields != NULL);
+ g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page)); - g_hash_table_insert(fields->fields,
+ g_hash_table_insert(page->fields, g_strdup(purple_request_field_get_id(field)), field);
if(purple_request_field_is_required(field)) {
- fields->required_fields = g_list_append(fields->required_fields,
+ page->required_fields = g_list_append(page->required_fields, field); if(purple_request_field_is_validatable(field)) {
- fields->validated_fields = g_list_append(fields->validated_fields,
+ page->validated_fields = g_list_append(page->validated_fields, field); -purple_request_fields_add_group(PurpleRequestFields *fields,
- PurpleRequestGroup *group)
+purple_request_page_add_group(PurpleRequestPage *page, + PurpleRequestGroup *group) PurpleRequestField *field;
- g_return_if_fail(fields != NULL);
+ g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page)); g_return_if_fail(PURPLE_IS_REQUEST_GROUP(group));
- fields->groups = g_list_append(fields->groups, group);
+ position = g_list_length(page->groups); + page->groups = g_list_append(page->groups, group); - _purple_request_group_set_field_list(group, fields);
+ _purple_request_group_set_page(group, page); for (l = purple_request_group_get_fields(group);
@@ -131,78 +174,75 @@
- g_hash_table_insert(fields->fields,
- g_strdup(purple_request_field_get_id(field)), field);
+ g_hash_table_insert(page->fields, + g_strdup(purple_request_field_get_id(field)), if (purple_request_field_is_required(field)) {
- fields->required_fields =
- g_list_append(fields->required_fields, field);
+ page->required_fields = g_list_append(page->required_fields, if (purple_request_field_is_validatable(field)) {
- fields->validated_fields =
- g_list_append(fields->validated_fields, field);
+ page->validated_fields = g_list_append(page->validated_fields, + g_list_model_items_changed(G_LIST_MODEL(page), position, 0, 1); -purple_request_fields_get_groups(const PurpleRequestFields *fields)
- g_return_val_if_fail(fields != NULL, NULL);
+purple_request_page_get_groups(PurpleRequestPage *page) { + g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL);
-purple_request_fields_exists(const PurpleRequestFields *fields, const char *id)
- g_return_val_if_fail(fields != NULL, FALSE);
+purple_request_page_exists(PurpleRequestPage *page, const char *id) { + g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE); g_return_val_if_fail(id != NULL, FALSE);
- return (g_hash_table_lookup(fields->fields, id) != NULL);
+ return (g_hash_table_lookup(page->fields, id) != NULL); -purple_request_fields_get_required(const PurpleRequestFields *fields)
- g_return_val_if_fail(fields != NULL, NULL);
+purple_request_page_get_required(PurpleRequestPage *page) { + g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); - return fields->required_fields;
+ return page->required_fields; -purple_request_fields_get_validatable(const PurpleRequestFields *fields)
- g_return_val_if_fail(fields != NULL, NULL);
+purple_request_page_get_validatable(PurpleRequestPage *page) { + g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); - return fields->validated_fields;
+ return page->validated_fields; -purple_request_fields_is_field_required(const PurpleRequestFields *fields,
+purple_request_page_is_field_required(PurpleRequestPage *page, const char *id) PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, FALSE);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE); g_return_val_if_fail(id != NULL, FALSE);
- if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+ if((field = purple_request_page_get_field(page, id)) == NULL) { return purple_request_field_is_required(field);
-purple_request_fields_all_required_filled(const PurpleRequestFields *fields)
+purple_request_page_all_required_filled(PurpleRequestPage *page) { - g_return_val_if_fail(fields != NULL, FALSE);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE); - for (l = fields->required_fields; l != NULL; l = l->next)
+ for(l = page->required_fields; l != NULL; l = l->next) { PurpleRequestField *field = PURPLE_REQUEST_FIELD(l->data);
if (!purple_request_field_is_filled(field))
@@ -213,14 +253,12 @@
-purple_request_fields_all_valid(const PurpleRequestFields *fields)
+purple_request_page_all_valid(PurpleRequestPage *page) { - g_return_val_if_fail(fields != NULL, FALSE);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE); - for (l = fields->validated_fields; l != NULL; l = l->next)
+ for(l = page->validated_fields; l != NULL; l = l->next) { PurpleRequestField *field = PURPLE_REQUEST_FIELD(l->data);
if (!purple_request_field_is_valid(field, NULL))
@@ -231,14 +269,13 @@
-purple_request_fields_get_field(const PurpleRequestFields *fields, const char *id)
+purple_request_page_get_field(PurpleRequestPage *page, const char *id) { PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, NULL);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); g_return_val_if_fail(id != NULL, NULL);
- field = g_hash_table_lookup(fields->fields, id);
+ field = g_hash_table_lookup(page->fields, id); g_return_val_if_fail(PURPLE_IS_REQUEST_FIELD(field), NULL);
@@ -246,88 +283,85 @@
-purple_request_fields_get_string(const PurpleRequestFields *fields, const char *id)
+purple_request_page_get_string(PurpleRequestPage *page, const char *id) { PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, NULL);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); g_return_val_if_fail(id != NULL, NULL);
- if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+ if((field = purple_request_page_get_field(page, id)) == NULL) { return purple_request_field_string_get_value(field);
-purple_request_fields_get_integer(const PurpleRequestFields *fields,
+purple_request_page_get_integer(PurpleRequestPage *page, const char *id) { PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, 0);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), 0); g_return_val_if_fail(id != NULL, 0);
- if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+ if((field = purple_request_page_get_field(page, id)) == NULL) { return purple_request_field_int_get_value(field);
-purple_request_fields_get_bool(const PurpleRequestFields *fields, const char *id)
+purple_request_page_get_bool(PurpleRequestPage *page, const char *id) { PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, FALSE);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), FALSE); g_return_val_if_fail(id != NULL, FALSE);
- if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+ if((field = purple_request_page_get_field(page, id)) == NULL) { return purple_request_field_bool_get_value(field);
-purple_request_fields_get_choice(const PurpleRequestFields *fields,
+purple_request_page_get_choice(PurpleRequestPage *page, const char *id) { PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, NULL);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); g_return_val_if_fail(id != NULL, NULL);
- if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+ if((field = purple_request_page_get_field(page, id)) == NULL) { return purple_request_field_choice_get_value(field);
-purple_request_fields_get_account(const PurpleRequestFields *fields,
+purple_request_page_get_account(PurpleRequestPage *page, const char *id) { PurpleRequestField *field;
- g_return_val_if_fail(fields != NULL, NULL);
+ g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); g_return_val_if_fail(id != NULL, NULL);
- if ((field = purple_request_fields_get_field(fields, id)) == NULL)
+ if((field = purple_request_page_get_field(page, id)) == NULL) { return purple_request_field_account_get_value(field);
-gpointer purple_request_fields_get_ui_data(const PurpleRequestFields *fields)
- g_return_val_if_fail(fields != NULL, NULL);
+purple_request_page_get_ui_data(PurpleRequestPage *page) { + g_return_val_if_fail(PURPLE_IS_REQUEST_PAGE(page), NULL); - return fields->ui_data;
-void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data)
- g_return_if_fail(fields != NULL);
+purple_request_page_set_ui_data(PurpleRequestPage *page, gpointer ui_data) { + g_return_if_fail(PURPLE_IS_REQUEST_PAGE(page)); - fields->ui_data = ui_data;
+ page->ui_data = ui_data; --- a/libpurple/purplerequestpage.h Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/purplerequestpage.h Tue Mar 07 01:04:42 2023 -0600
@@ -33,11 +33,11 @@
* Multiple fields request data.
-typedef struct _PurpleRequestFields PurpleRequestFields;
+typedef struct _PurpleRequestPage PurpleRequestPage; #include "purplerequestgroup.h"
@@ -45,185 +45,169 @@
- * purple_request_fields_new:
- * Creates a list of fields to pass to purple_request_fields().
- * Returns: (transfer full): A PurpleRequestFields structure.
-PurpleRequestFields *purple_request_fields_new(void);
+#define PURPLE_TYPE_REQUEST_PAGE (purple_request_page_get_type()) +G_DECLARE_FINAL_TYPE(PurpleRequestPage, purple_request_page, + PURPLE, REQUEST_PAGE, GObject) - * purple_request_fields_destroy:
- * @fields: The list of fields to destroy.
+ * purple_request_page_new: + * Creates a page of fields to pass to [func@Purple.request_fields]. - * Destroys a list of fields.
+ * Returns: (transfer full): The new request page. -void purple_request_fields_destroy(PurpleRequestFields *fields);
+PurpleRequestPage *purple_request_page_new(void); - * purple_request_fields_add_group:
- * @fields: The fields list.
- * @group: The group to add.
+ * purple_request_page_add_group: + * @page: The fields page. + * @group: (transfer full): The group to add. * Adds a group of fields to the list.
-void purple_request_fields_add_group(PurpleRequestFields *fields, PurpleRequestGroup *group);
+void purple_request_page_add_group(PurpleRequestPage *page, PurpleRequestGroup *group); - * purple_request_fields_get_groups:
- * @fields: The fields list.
+ * purple_request_page_get_groups: + * @page: The fields page. * Returns a list of all groups in a field list.
* Returns: (element-type PurpleRequestGroup) (transfer none): A list of groups.
-GList *purple_request_fields_get_groups(const PurpleRequestFields *fields);
+GList *purple_request_page_get_groups(PurpleRequestPage *page); - * purple_request_fields_exists:
- * @fields: The fields list.
- * @id: The ID of the field.
+ * purple_request_page_exists: + * @page: The fields page. + * @id: The ID of the field. * Returns whether or not the field with the specified ID exists.
* Returns: TRUE if the field exists, or FALSE.
-gboolean purple_request_fields_exists(const PurpleRequestFields *fields,
+gboolean purple_request_page_exists(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_required:
- * @fields: The fields list.
+ * purple_request_page_get_required: + * @page: The fields page. * Returns a list of all required fields.
* Returns: (element-type PurpleRequestField) (transfer none): The list of required fields.
-const GList *purple_request_fields_get_required(
- const PurpleRequestFields *fields);
+const GList *purple_request_page_get_required(PurpleRequestPage *page); - * purple_request_fields_get_validatable:
- * @fields: The fields list.
+ * purple_request_page_get_validatable: + * @page: The fields page. * Returns a list of all validated fields.
* Returns: (element-type PurpleRequestField) (transfer none): The list of validated fields.
-const GList *purple_request_fields_get_validatable(
- const PurpleRequestFields *fields);
+const GList *purple_request_page_get_validatable(PurpleRequestPage *page); - * purple_request_fields_is_field_required:
- * @fields: The fields list.
+ * purple_request_page_is_field_required: + * @page: The fields page. * Returns whether or not a field with the specified ID is required.
* Returns: TRUE if the specified field is required, or FALSE.
-gboolean purple_request_fields_is_field_required(const PurpleRequestFields *fields,
+gboolean purple_request_page_is_field_required(PurpleRequestPage *page, const char *id); - * purple_request_fields_all_required_filled:
- * @fields: The fields list.
+ * purple_request_page_all_required_filled: + * @page: The fields page. * Returns whether or not all required fields have values.
* Returns: TRUE if all required fields have values, or FALSE.
-gboolean purple_request_fields_all_required_filled(
- const PurpleRequestFields *fields);
+gboolean purple_request_page_all_required_filled(PurpleRequestPage *page); - * purple_request_fields_all_valid:
- * @fields: The fields list.
+ * purple_request_page_all_valid: + * @page: The fields page. * Returns whether or not all fields are valid.
* Returns: TRUE if all fields are valid, or FALSE.
-gboolean purple_request_fields_all_valid(const PurpleRequestFields *fields);
+gboolean purple_request_page_all_valid(PurpleRequestPage *page); - * purple_request_fields_get_field:
- * @fields: The fields list.
- * @id: The ID of the field.
+ * purple_request_page_get_field: + * @page: The fields page. + * @id: The ID of the field. * Return the field with the specified ID.
* Returns: (transfer none): The field, if found.
-PurpleRequestField *purple_request_fields_get_field(
- const PurpleRequestFields *fields, const char *id);
+PurpleRequestField *purple_request_page_get_field(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_string:
- * @fields: The fields list.
- * @id: The ID of the field.
+ * purple_request_page_get_string: + * @page: The fields page. + * @id: The ID of the field. * Returns the string value of a field with the specified ID.
* Returns: The string value, if found, or %NULL otherwise.
-const char *purple_request_fields_get_string(const PurpleRequestFields *fields,
+const char *purple_request_page_get_string(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_integer:
- * @fields: The fields list.
- * @id: The ID of the field.
+ * purple_request_page_get_integer: + * @page: The fields page. + * @id: The ID of the field. * Returns the integer value of a field with the specified ID.
* Returns: The integer value, if found, or 0 otherwise.
-int purple_request_fields_get_integer(const PurpleRequestFields *fields,
+int purple_request_page_get_integer(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_bool:
- * @fields: The fields list.
- * @id: The ID of the field.
+ * purple_request_page_get_bool: + * @page: The fields page. + * @id: The ID of the field. * Returns the boolean value of a field with the specified ID.
* Returns: The boolean value, if found, or %FALSE otherwise.
-gboolean purple_request_fields_get_bool(const PurpleRequestFields *fields,
+gboolean purple_request_page_get_bool(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_choice:
- * @fields: The fields list.
+ * purple_request_page_get_choice: + * @page: The fields page. * @id: The ID of the field.
* Returns the choice index of a field with the specified ID.
* Returns: The choice value, if found, or NULL otherwise.
-purple_request_fields_get_choice(const PurpleRequestFields *fields,
+gpointer purple_request_page_get_choice(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_account:
- * @fields: The fields list.
+ * purple_request_page_get_account: + * @page: The fields page. * @id: The ID of the field.
* Returns the account of a field with the specified ID.
* Returns: (transfer none): The account value, if found, or %NULL otherwise.
-PurpleAccount *purple_request_fields_get_account(const PurpleRequestFields *fields,
+PurpleAccount *purple_request_page_get_account(PurpleRequestPage *page, const char *id); - * purple_request_fields_get_ui_data:
- * @fields: The fields list.
+ * purple_request_page_get_ui_data: + * @page: The fields page. * Returns the UI data associated with this object.
@@ -231,16 +215,16 @@
* convenience field provided to the UIs--it is not
* used by the libpurple core.
-gpointer purple_request_fields_get_ui_data(const PurpleRequestFields *fields);
+gpointer purple_request_page_get_ui_data(PurpleRequestPage *page); - * purple_request_fields_set_ui_data:
- * @fields: The fields list.
+ * purple_request_page_set_ui_data: + * @page: The fields page. * @ui_data: A pointer to associate with this object.
* Set the UI data associated with this object.
-void purple_request_fields_set_ui_data(PurpleRequestFields *fields, gpointer ui_data);
+void purple_request_page_set_ui_data(PurpleRequestPage *page, gpointer ui_data); --- a/libpurple/request.c Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/request.c Tue Mar 07 01:04:42 2023 -0600
@@ -621,11 +621,11 @@
-purple_request_fields_strip_html(PurpleRequestFields *fields)
+purple_request_fields_strip_html(PurpleRequestPage *page) - for (itg = purple_request_fields_get_groups(fields);
+ for (itg = purple_request_page_get_groups(page); @@ -652,18 +652,18 @@
purple_request_fields(void *handle, const char *title, const char *primary,
- const char *secondary, PurpleRequestFields *fields, const char *ok_text,
+ const char *secondary, PurpleRequestPage *page, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb,
PurpleRequestCommonParameters *cpar, void *user_data)
- if (G_UNLIKELY(fields == NULL ||
+ if(G_UNLIKELY(!PURPLE_IS_REQUEST_PAGE(page) || ((ok_text == NULL) != (ok_cb == NULL)) ||
purple_request_cpar_unref(cpar);
- g_warn_if_fail(fields != NULL);
+ g_warn_if_fail(PURPLE_IS_REQUEST_PAGE(page)); g_warn_if_fail((ok_text == NULL) != (ok_cb == NULL));
g_warn_if_fail(cancel_text != NULL);
g_return_val_if_reached(NULL);
@@ -674,7 +674,7 @@
if (purple_request_cpar_is_html(cpar) &&
!((ops->features & PURPLE_REQUEST_FEATURE_HTML)))
- purple_request_fields_strip_html(fields);
+ purple_request_fields_strip_html(page); if (ops != NULL && ops->request_fields != NULL) {
@@ -687,8 +687,9 @@
info->type = PURPLE_REQUEST_FIELDS;
info->ui_handle = ops->request_fields(title, primary, secondary,
- fields, ok_text, ok_cb, cancel_text, cancel_cb,
+ cancel_text, cancel_cb, cpar, handles = g_list_append(handles, info);
--- a/libpurple/request.h Tue Mar 07 00:22:36 2023 -0600
+++ b/libpurple/request.h Tue Mar 07 01:04:42 2023 -0600
@@ -165,7 +165,7 @@
void *(*request_fields)(const char *title, const char *primary,
- const char *secondary, PurpleRequestFields *fields,
+ const char *secondary, PurpleRequestPage *page, const char *ok_text, GCallback ok_cb,
const char *cancel_text, GCallback cancel_cb,
PurpleRequestCommonParameters *cpar, void *user_data);
@@ -210,7 +210,7 @@
* values of those choice.
typedef void (*PurpleRequestChoiceCb)(void *data, gpointer value);
-typedef void (*PurpleRequestFieldsCb)(void *data, PurpleRequestFields *fields);
+typedef void (*PurpleRequestFieldsCb)(void *data, PurpleRequestPage *page); typedef void (*PurpleRequestFileCb)(void *data, const char *filename);
typedef void (*PurpleRequestHelpCb)(gpointer data);
@@ -461,7 +461,7 @@
* #PurpleRequestFieldsCb function to use when the button is clicked.
* Should be terminated with the NULL label.
- * Sets extra actions for the PurpleRequestFields dialog.
+ * Sets extra actions for the PurpleRequestPage dialog. purple_request_cpar_set_extra_actions(PurpleRequestCommonParameters *cpar, ...);
@@ -470,7 +470,7 @@
* purple_request_cpar_get_extra_actions:
* @cpar: The parameters set (may be %NULL).
- * Gets extra actions for the PurpleRequestFields dialog.
+ * Gets extra actions for the PurpleRequestPage dialog. * Returns: (element-type PurpleKeyValuePair) (transfer none): A list of actions (pairs of arguments, as in
@@ -763,7 +763,7 @@
* @primary: The main point of the message, or %NULL if you're
* @secondary: Secondary information, or %NULL if there is none.
- * @fields: The list of fields.
+ * @page: The page of fields. * @ok_text: The text for the <literal>OK</literal> button, which may not be
* @ok_cb: (scope notified): The callback for the <literal>OK</literal> button, which may
@@ -783,7 +783,7 @@
purple_request_fields(void *handle, const char *title, const char *primary,
- const char *secondary, PurpleRequestFields *fields,
+ const char *secondary, PurpleRequestPage *page, const char *ok_text, GCallback ok_cb,
const char *cancel_text, GCallback cancel_cb,
PurpleRequestCommonParameters *cpar,
--- a/pidgin/gtkdialogs.c Tue Mar 07 00:22:36 2023 -0600
+++ b/pidgin/gtkdialogs.c Tue Mar 07 01:04:42 2023 -0600
@@ -47,30 +47,29 @@
-pidgin_dialogs_im_cb(G_GNUC_UNUSED gpointer data, PurpleRequestFields *fields)
+pidgin_dialogs_im_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { - account = purple_request_fields_get_account(fields, "account");
- username = purple_request_fields_get_string(fields, "screenname");
+ account = purple_request_page_get_account(page, "account"); + username = purple_request_page_get_string(page, "screenname"); pidgin_dialogs_im_with_user(account, username);
pidgin_dialogs_im_name_validator(G_GNUC_UNUSED PurpleRequestField *field,
- char **errmsg, gpointer _fields)
+ char **errmsg, gpointer data) - PurpleRequestFields *fields = _fields;
+ PurpleRequestPage *page = data; PurpleProtocol *protocol;
- account = purple_request_fields_get_account(fields, "account");
+ account = purple_request_page_get_account(page, "account"); protocol = purple_account_get_protocol(account);
- username = purple_request_fields_get_string(fields, "screenname");
+ username = purple_request_page_get_string(page, "screenname"); valid = purple_validate(protocol, username);
@@ -85,19 +84,19 @@
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("screenname", _("_Name"), NULL, FALSE);
purple_request_field_set_type_hint(field, "screenname");
purple_request_field_set_required(field, TRUE);
- purple_request_field_set_validator(field, pidgin_dialogs_im_name_validator, fields);
+ purple_request_field_set_validator(field, pidgin_dialogs_im_name_validator, page); purple_request_group_add_field(group, field);
field = purple_request_field_account_new("account", _("_Account"), NULL);
@@ -112,7 +111,7 @@
purple_blist_get_default(), _("New Instant Message"), NULL,
_("Please enter the username or alias of the person "
"you would like to IM."),
- fields, _("OK"), G_CALLBACK(pidgin_dialogs_im_cb), _("Cancel"),
+ page, _("OK"), G_CALLBACK(pidgin_dialogs_im_cb), _("Cancel"), @@ -137,16 +136,14 @@
-pidgin_dialogs_info_cb(G_GNUC_UNUSED gpointer data,
- PurpleRequestFields *fields)
+pidgin_dialogs_info_cb(G_GNUC_UNUSED gpointer data, PurpleRequestPage *page) { const gchar *screenname = NULL;
- account = purple_request_fields_get_account(fields, "account");
+ account = purple_request_page_get_account(page, "account"); - screenname = purple_request_fields_get_string(fields, "screenname");
+ screenname = purple_request_page_get_string(page, "screenname"); username = g_strdup(purple_normalize(account, screenname));
if(username != NULL && *username != '\0' && account != NULL) {
@@ -160,14 +157,14 @@
pidgin_dialogs_info(void)
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleRequestGroup *group;
PurpleRequestField *field;
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); group = purple_request_group_new(NULL);
- purple_request_fields_add_group(fields, group);
+ purple_request_page_add_group(page, group); field = purple_request_field_string_new("screenname", _("_Name"), NULL, FALSE);
purple_request_field_set_type_hint(field, "screenname");
@@ -186,7 +183,7 @@
purple_blist_get_default(), _("Get User Info"), NULL,
_("Please enter the username or alias of the person "
"whose info you would like to view."),
- fields, _("OK"), G_CALLBACK(pidgin_dialogs_info_cb),
+ page, _("OK"), G_CALLBACK(pidgin_dialogs_info_cb), _("Cancel"), NULL, NULL, NULL);
--- a/pidgin/gtkrequest.c Tue Mar 07 00:22:36 2023 -0600
+++ b/pidgin/gtkrequest.c Tue Mar 07 01:04:42 2023 -0600
@@ -65,7 +65,7 @@
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; @@ -226,16 +226,16 @@
PurpleRequestField *field)
PurpleRequestGroup *group;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PidginRequestData *req_data;
group = purple_request_field_get_group(field);
- fields = purple_request_group_get_fields_list(group);
- req_data = purple_request_fields_get_ui_data(fields);
+ page = purple_request_group_get_page(group); + req_data = purple_request_page_get_ui_data(page); gtk_widget_set_sensitive(req_data->ok_button,
- purple_request_fields_all_required_filled(fields) &&
- purple_request_fields_all_valid(fields));
+ purple_request_page_all_required_filled(page) && + purple_request_page_all_valid(page)); @@ -283,7 +283,7 @@
if (data->cbs[0] != NULL)
((PurpleRequestFieldsCb)data->cbs[0])(data->user_data,
- data->u.multifield.fields);
+ data->u.multifield.page); purple_request_close(PURPLE_REQUEST_FIELDS, data);
@@ -295,7 +295,7 @@
if (data->cbs[1] != NULL)
((PurpleRequestFieldsCb)data->cbs[1])(data->user_data,
- data->u.multifield.fields);
+ data->u.multifield.page); purple_request_close(PURPLE_REQUEST_FIELDS, data);
@@ -310,7 +310,7 @@
cb = g_object_get_data(G_OBJECT(button), "extra-cb");
- cb(data->user_data, data->u.multifield.fields);
+ cb(data->user_data, data->u.multifield.page); purple_request_close(PURPLE_REQUEST_FIELDS, data);
@@ -1879,7 +1879,7 @@
pidgin_request_fields(const char *title, const char *primary,
- const char *secondary, PurpleRequestFields *fields, const char *ok_text,
+ const char *secondary, PurpleRequestPage *page, const char *ok_text, GCallback ok_cb, const char *cancel_text, GCallback cancel_cb,
PurpleRequestCommonParameters *cpar, void *user_data)
@@ -1905,9 +1905,9 @@
data = g_new0(PidginRequestData, 1);
data->type = PURPLE_REQUEST_FIELDS;
data->user_data = user_data;
- data->u.multifield.fields = fields;
- purple_request_fields_set_ui_data(fields, data);
+ data->u.multifield.page = page; + purple_request_page_set_ui_data(page, data); extra_actions = purple_request_cpar_get_extra_actions(cpar);
@@ -2005,10 +2005,7 @@
gtk_box_append(GTK_BOX(vbox), label);
- for (gl = purple_request_fields_get_groups(fields);
+ for(gl = purple_request_page_get_groups(page); gl != NULL; gl = gl->next) { @@ -2199,11 +2196,13 @@
g_object_unref(datasheet_buttons_sg);
- if (!purple_request_fields_all_required_filled(fields))
+ if(!purple_request_page_all_required_filled(page)) { gtk_widget_set_sensitive(data->ok_button, FALSE);
- if (!purple_request_fields_all_valid(fields))
+ if(!purple_request_page_all_valid(page)) { gtk_widget_set_sensitive(data->ok_button, FALSE);
pidgin_auto_parent_window(win);
@@ -2424,8 +2423,9 @@
gtk_window_destroy(GTK_WINDOW(data->dialog));
- if (type == PURPLE_REQUEST_FIELDS)
- purple_request_fields_destroy(data->u.multifield.fields);
+ if(type == PURPLE_REQUEST_FIELDS) { + g_clear_object(&data->u.multifield.page); --- a/pidgin/pidginmooddialog.c Tue Mar 07 00:22:36 2023 -0600
+++ b/pidgin/pidginmooddialog.c Tue Mar 07 01:04:42 2023 -0600
@@ -57,19 +57,19 @@
* @connection: The #PurpleConnection instance.
- * @fields: The #PurpleRequestFields
+ * @page: The #PurpleRequestPage * This a callback function for when the request dialog has been accepted.
pidgin_mood_dialog_edit_cb(PurpleConnection *connection,
- PurpleRequestFields *fields)
+ PurpleRequestPage *page) PurpleRequestField *mood_field = NULL;
const gchar *mood = NULL;
- mood_field = purple_request_fields_get_field(fields, "mood");
+ mood_field = purple_request_page_get_field(page, "mood"); l = purple_request_field_list_get_selected(mood_field);
@@ -87,7 +87,7 @@
if (flags & PURPLE_CONNECTION_FLAG_SUPPORT_MOOD_MESSAGES) {
PurpleRequestField *text_field = NULL;
- text_field = purple_request_fields_get_field(fields, "text");
+ text_field = purple_request_page_get_field(page, "text"); text = purple_request_field_string_get_value(text_field);
@@ -245,7 +245,7 @@
pidgin_mood_dialog_show(PurpleAccount *account) {
const gchar *current_mood;
- PurpleRequestFields *fields;
+ PurpleRequestPage *page; PurpleConnection *gc = NULL;
@@ -264,7 +264,7 @@
current_mood = pidgin_mood_get_global_status();
- fields = purple_request_fields_new();
+ page = purple_request_page_new(); g = purple_request_group_new(NULL);
f = purple_request_field_list_new("mood", _("Please select your mood from the list"));
@@ -299,7 +299,7 @@
purple_request_group_add_field(g, f);
- purple_request_fields_add_group(fields, g);
+ purple_request_page_add_group(page, g); /* if the connection allows setting a mood message */
if (gc && (purple_connection_get_flags(gc) & PURPLE_CONNECTION_FLAG_SUPPORT_MOOD_MESSAGES)) {
@@ -307,11 +307,11 @@
f = purple_request_field_string_new("text",
_("Message (optional)"), NULL, FALSE);
purple_request_group_add_field(g, f);
- purple_request_fields_add_group(fields, g);
+ purple_request_page_add_group(page, g); purple_request_fields(gc, _("Edit User Mood"), _("Edit User Mood"),
_("OK"), G_CALLBACK(pidgin_mood_dialog_edit_cb),
purple_request_cpar_from_connection(gc), gc);