diff options
author | Steffen Jaeckel <jaeckel-floss@eyet-services.de> | 2023-04-03 15:54:33 +0200 |
---|---|---|
committer | Steffen Jaeckel <jaeckel-floss@eyet-services.de> | 2023-04-04 11:22:00 +0200 |
commit | 7271898541f217b24ce13010ca494c7b74d49ad6 (patch) | |
tree | 7d17ca5427bd0e3ded5ebbfe73ae48a2fa1b29e7 | |
parent | 74415ae71d287d097a7adadea34cb8662735b530 (diff) | |
download | profani-tty-7271898541f217b24ce13010ca494c7b74d49ad6.tar.gz |
fix display of a "list type" in a form if there's no value assigned yet
It is possible, that a server sends a form with a field as follows, which has no (default) value assigned. ``` <field label="foo" type="list-single" var="bar"> <option label="a"><value>a</value></option> <option label="b"><value>b</value></option> <option label="c"><value>c</value></option> </field> ``` This patch fixes profanity to show that list. Before this patch profanity showed nothing. I stumbled over this while running the `/room config` command inside a newly created muc on the `sure.im` XMPP server. Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
-rw-r--r-- | src/ui/confwin.c | 48 |
1 files changed, 21 insertions, 27 deletions
diff --git a/src/ui/confwin.c b/src/ui/confwin.c index d74c6d86..85abe748 100644 --- a/src/ui/confwin.c +++ b/src/ui/confwin.c @@ -215,8 +215,8 @@ _confwin_form_field(ProfWin* window, char* tag, FormField* field) win_append(window, THEME_DEFAULT, ": "); } - GSList* values = field->values; - GSList* curr_value = values; + GSList* curr_value = field->values; + GSList* curr_option; switch (field->type_t) { case FIELD_HIDDEN: @@ -272,36 +272,30 @@ _confwin_form_field(ProfWin* window, char* tag, FormField* field) } break; case FIELD_LIST_SINGLE: - if (curr_value) { - win_newline(window); - char* value = curr_value->data; - GSList* options = field->options; - GSList* curr_option = options; - while (curr_option) { - FormOption* option = curr_option->data; - if (g_strcmp0(option->value, value) == 0) { - win_println(window, THEME_ONLINE, "-", " [%s] %s", option->value, option->label); - } else { - win_println(window, THEME_OFFLINE, "-", " [%s] %s", option->value, option->label); - } - curr_option = g_slist_next(curr_option); + win_newline(window); + char* value = curr_value ? curr_value->data : NULL; + curr_option = field->options; + while (curr_option) { + FormOption* option = curr_option->data; + if (g_strcmp0(option->value, value) == 0) { + win_println(window, THEME_ONLINE, "-", " [%s] %s", option->value, option->label); + } else { + win_println(window, THEME_OFFLINE, "-", " [%s] %s", option->value, option->label); } + curr_option = g_slist_next(curr_option); } break; case FIELD_LIST_MULTI: - if (curr_value) { - win_newline(window); - GSList* options = field->options; - GSList* curr_option = options; - while (curr_option) { - FormOption* option = curr_option->data; - if (g_slist_find_custom(curr_value, option->value, (GCompareFunc)g_strcmp0)) { - win_println(window, THEME_ONLINE, "-", " [%s] %s", option->value, option->label); - } else { - win_println(window, THEME_OFFLINE, "-", " [%s] %s", option->value, option->label); - } - curr_option = g_slist_next(curr_option); + win_newline(window); + curr_option = field->options; + while (curr_option) { + FormOption* option = curr_option->data; + if (g_slist_find_custom(curr_value, option->value, (GCompareFunc)g_strcmp0)) { + win_println(window, THEME_ONLINE, "-", " [%s] %s", option->value, option->label); + } else { + win_println(window, THEME_OFFLINE, "-", " [%s] %s", option->value, option->label); } + curr_option = g_slist_next(curr_option); } break; case FIELD_JID_SINGLE: |