diff options
author | Michel Le Bihan <michel@lebihan.pl> | 2021-02-17 22:57:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-17 22:57:53 +0100 |
commit | e06cc0842575ebafd92213027287a1d6bc75459e (patch) | |
tree | b482f8f87585043c7af24c281973f920df326b55 | |
parent | a417cb396b18fe7ffc2a75fc640327d70793f85d (diff) | |
download | dino-e06cc0842575ebafd92213027287a1d6bc75459e.tar.gz dino-e06cc0842575ebafd92213027287a1d6bc75459e.zip |
Improve IBR form handling (#990)
* Change register account dialog to show instructions
Change data forms to handle title and instructions elements
* Change register account dialog to show fixed fields
Closes #988
* Change form switch to halign start
Closes #992
* Change register account dialog to markup URLs
-rw-r--r-- | main/src/ui/manage_accounts/add_account_dialog.vala | 9 | ||||
-rw-r--r-- | main/src/ui/util/data_forms.vala | 2 | ||||
-rw-r--r-- | xmpp-vala/src/module/xep/0004_data_forms.vala | 12 |
3 files changed, 22 insertions, 1 deletions
diff --git a/main/src/ui/manage_accounts/add_account_dialog.vala b/main/src/ui/manage_accounts/add_account_dialog.vala index 339b880f..2f2bcb43 100644 --- a/main/src/ui/manage_accounts/add_account_dialog.vala +++ b/main/src/ui/manage_accounts/add_account_dialog.vala @@ -339,11 +339,20 @@ public class AddAccountDialog : Gtk.Dialog { register_form_continue.visible = true; register_form_continue.grab_focus(); } else if (form.fields.size > 0) { + if (form.instructions != null && form.instructions != "") { + string markup_instructions = Util.parse_add_markup(form.instructions, null, true, false); + form_box.add(new Label(markup_instructions) { use_markup=true, halign=Align.CENTER, xalign=0, margin_top=7, + wrap=true, wrap_mode=Pango.WrapMode.WORD_CHAR, visible=true }); + } foreach (Xep.DataForms.DataForm.Field field in form.fields) { Widget? field_widget = Util.get_data_form_field_widget(field); if (field.label != null && field.label != "" && field_widget != null) { form_box.add(new Label(field.label) { xalign=0, margin_top=7, visible=true }); form_box.add(field_widget); + } else if (field.type_ == Xep.DataForms.DataForm.Type.FIXED && field.get_value_string() != "") { + string markup_fixed_field = Util.parse_add_markup(field.get_value_string(), null, true, false); + form_box.add(new Label(markup_fixed_field) { use_markup=true, xalign=0, margin_top=7, + wrap=true, wrap_mode=Pango.WrapMode.WORD_CHAR, visible=true }); } } register_form_continue.visible = true; diff --git a/main/src/ui/util/data_forms.vala b/main/src/ui/util/data_forms.vala index c3449a86..b36012de 100644 --- a/main/src/ui/util/data_forms.vala +++ b/main/src/ui/util/data_forms.vala @@ -11,7 +11,7 @@ public static Widget? get_data_form_field_widget(DataForms.DataForm.Field field) switch (field.type_) { case DataForms.DataForm.Type.BOOLEAN: DataForms.DataForm.BooleanField boolean_field = field as DataForms.DataForm.BooleanField; - Switch sw = new Switch() { active=boolean_field.value, valign=Align.CENTER, visible=true }; + Switch sw = new Switch() { active=boolean_field.value, halign=Align.START, valign=Align.CENTER, visible=true }; sw.state_set.connect((state) => { boolean_field.value = state; return false; diff --git a/xmpp-vala/src/module/xep/0004_data_forms.vala b/xmpp-vala/src/module/xep/0004_data_forms.vala index 1ed899fc..fe39874a 100644 --- a/xmpp-vala/src/module/xep/0004_data_forms.vala +++ b/xmpp-vala/src/module/xep/0004_data_forms.vala @@ -9,6 +9,8 @@ public class DataForm { public StanzaNode stanza_node { get; set; } public Gee.List<Field> fields = new ArrayList<Field>(); public string? form_type = null; + public string? instructions = null; + public string? title = null; public StanzaNode get_submit_node() { stanza_node.set_attribute("type", "submit"); @@ -215,6 +217,16 @@ public class DataForm { fields.add(new TextSingleField(field_node)); break; } } + + StanzaNode? instructions_node = node.get_subnode("instructions", NS_URI); + if (instructions_node != null) { + instructions = instructions_node.get_string_content(); + } + + StanzaNode? title_node = node.get_subnode("title", NS_URI); + if (title_node != null) { + title = title_node.get_string_content(); + } } internal DataForm() { |