void QuetzalAccount::onPasswordEntered(const QString &password, bool remember) { PasswordDialog *dialog = qobject_cast<PasswordDialog *>(sender()); QuetzalAccountPasswordInfo info = dialog->property("info").value<QuetzalAccountPasswordInfo>(); PurpleRequestField *passwordField = purple_request_fields_get_field(info.fields, "password"); PurpleRequestField *rememberField = purple_request_fields_get_field(info.fields, "remember"); purple_request_field_string_set_value(passwordField, password.toUtf8().constData()); purple_request_field_bool_set_value(rememberField, remember); info.okCb(info.userData, info.fields); purple_request_fields_destroy(info.fields); dialog->deleteLater(); // if (remember) { // purple_account_set_password(password); // } // config("general").setValue("passwd", password, Config::Crypted); }
PurpleRequestField * purple_request_field_bool_new(const char *id, const char *text, gboolean default_value) { PurpleRequestField *field; g_return_val_if_fail(id != NULL, NULL); g_return_val_if_fail(text != NULL, NULL); field = purple_request_field_new(id, text, PURPLE_REQUEST_FIELD_BOOLEAN); purple_request_field_bool_set_default_value(field, default_value); purple_request_field_bool_set_value(field, default_value); return field; }
void QuetzalFieldsDialog::onClicked(int button) { debug() << Q_FUNC_INFO << button; PurpleRequestFieldsCb cb = button == 0 ? m_ok_cb : m_cancel_cb; if (button == 0) { const QList<DataItem> items = form()->item().subitems(); for (int i = 0; i < items.size(); i++) { const DataItem &item = items.at(i); QByteArray id = item.name().toUtf8(); PurpleRequestField *field = purple_request_fields_get_field(m_fields, id.constData()); switch (purple_request_field_get_type(field)) { case PURPLE_REQUEST_FIELD_STRING: purple_request_field_string_set_value(field, item.data().toString().toUtf8().constData()); break; case PURPLE_REQUEST_FIELD_INTEGER: purple_request_field_int_set_value(field, item.data().toInt()); break; case PURPLE_REQUEST_FIELD_BOOLEAN: purple_request_field_bool_set_value(field, item.data().toBool()); break; case PURPLE_REQUEST_FIELD_CHOICE: { QStringList alternatives = item.property("alternatives", QStringList()); purple_request_field_choice_set_value(field, alternatives.indexOf(item.data().toString())); } break; case PURPLE_REQUEST_FIELD_LIST: break; case PURPLE_REQUEST_FIELD_ACCOUNT: break; case PURPLE_REQUEST_FIELD_IMAGE: case PURPLE_REQUEST_FIELD_LABEL: case PURPLE_REQUEST_FIELD_NONE: default: continue; } } } cb(userData(), m_fields); quetzal_request_close(PURPLE_REQUEST_FIELDS, this); }
static void request_fields_cb(GntWidget *button, PurpleRequestFields *fields) { PurpleRequestFieldsCb callback = g_object_get_data(G_OBJECT(button), "activate-callback"); gpointer data = g_object_get_data(G_OBJECT(button), "activate-userdata"); GList *list; /* Update the data of the fields. Pidgin does this differently. Instead of * updating the fields at the end like here, it updates the appropriate field * 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, althought it can be done. */ for (list = purple_request_fields_get_groups(fields); list; list = list->next) { PurpleRequestFieldGroup *group = list->data; GList *fields = purple_request_field_group_get_fields(group); for (; fields ; fields = fields->next) { PurpleRequestField *field = fields->data; PurpleRequestFieldType type = purple_request_field_get_type(field); if (type == PURPLE_REQUEST_FIELD_BOOLEAN) { GntWidget *check = FINCH_GET_DATA(field); gboolean value = gnt_check_box_get_checked(GNT_CHECK_BOX(check)); purple_request_field_bool_set_value(field, value); } else if (type == PURPLE_REQUEST_FIELD_STRING) { GntWidget *entry = FINCH_GET_DATA(field); const char *text = gnt_entry_get_text(GNT_ENTRY(entry)); purple_request_field_string_set_value(field, (text && *text) ? text : NULL); } else if (type == PURPLE_REQUEST_FIELD_INTEGER) { GntWidget *entry = FINCH_GET_DATA(field); const char *text = gnt_entry_get_text(GNT_ENTRY(entry)); int value = (text && *text) ? atoi(text) : 0; purple_request_field_int_set_value(field, value); } else if (type == PURPLE_REQUEST_FIELD_CHOICE) { GntWidget *combo = FINCH_GET_DATA(field); int id; id = GPOINTER_TO_INT(gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo))); purple_request_field_choice_set_value(field, id); } else if (type == PURPLE_REQUEST_FIELD_LIST) { GList *list = NULL; if (purple_request_field_list_get_multi_select(field)) { GList *iter; GntWidget *tree = FINCH_GET_DATA(field); iter = purple_request_field_list_get_items(field); for (; iter; iter = iter->next) { const char *text = iter->data; gpointer key = purple_request_field_list_get_data(field, text); if (gnt_tree_get_choice(GNT_TREE(tree), key)) list = g_list_prepend(list, key); } } else { GntWidget *combo = FINCH_GET_DATA(field); gpointer data = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); list = g_list_append(list, data); } purple_request_field_list_set_selected(field, list); g_list_free(list); } else if (type == PURPLE_REQUEST_FIELD_ACCOUNT) { GntWidget *combo = FINCH_GET_DATA(field); PurpleAccount *acc = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(combo)); purple_request_field_account_set_value(field, acc); } } } purple_notify_close_with_handle(button); if (!g_object_get_data(G_OBJECT(button), "cancellation-function") && !purple_request_fields_all_required_filled(fields)) { purple_notify_error(button, _("Error"), _("You must fill all the required fields."), _("The required fields are underlined.")); return; } if (callback) callback(data, fields); while (button->parent) button = button->parent; purple_request_close(PURPLE_REQUEST_FIELDS, button); }
void Request::FieldsDialog::BooleanField::OnToggle(CheckBox& activator, bool new_state) { purple_request_field_bool_set_value(field, new_state); }