From 570f2dc03608d525ef02102ff0ca8225d57b40ed Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 7 Nov 2019 18:52:49 +0000 Subject: remove user warning and fix up error handling in form select menus --- content/handlers/html/form.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) (limited to 'content/handlers/html/form.c') diff --git a/content/handlers/html/form.c b/content/handlers/html/form.c index 2918ce7d2..fd0f2fa3e 100644 --- a/content/handlers/html/form.c +++ b/content/handlers/html/form.c @@ -1486,10 +1486,11 @@ form_encode_item(const char *item, } /* exported interface documented in html/form_internal.h */ -bool form_open_select_menu(void *client_data, - struct form_control *control, - select_menu_redraw_callback callback, - struct content *c) +nserror +form_open_select_menu(void *client_data, + struct form_control *control, + select_menu_redraw_callback callback, + struct content *c) { int line_height_with_spacing; struct box *box; @@ -1497,15 +1498,14 @@ bool form_open_select_menu(void *client_data, int total_height; struct form_select_menu *menu; html_content *html = (html_content *)c; - + nserror res; /* if the menu is opened for the first time */ if (control->data.select.menu == NULL) { menu = calloc(1, sizeof (struct form_select_menu)); if (menu == NULL) { - guit->misc->warning("NoMemory", 0); - return false; + return NSERROR_NOMEM; } control->data.select.menu = menu; @@ -1513,9 +1513,8 @@ bool form_open_select_menu(void *client_data, box = control->box; menu->width = box->width + - box->border[RIGHT].width + - box->border[LEFT].width + - box->padding[RIGHT] + box->padding[LEFT]; + box->border[RIGHT].width + box->padding[RIGHT] + + box->border[LEFT].width + box->padding[LEFT]; font_plot_style_from_css(&html->len_ctx, control->box->style, &fstyle); @@ -1535,28 +1534,31 @@ bool form_open_select_menu(void *client_data, menu->height = total_height; if (menu->height > MAX_SELECT_HEIGHT) { - menu->height = MAX_SELECT_HEIGHT; } + menu->client_data = client_data; menu->callback = callback; - if (scrollbar_create(false, - menu->height, - total_height, - menu->height, - control, - form_select_menu_scroll_callback, - &(menu->scrollbar)) != NSERROR_OK) { + res = scrollbar_create(false, + menu->height, + total_height, + menu->height, + control, + form_select_menu_scroll_callback, + &(menu->scrollbar)); + if (res != NSERROR_OK) { + control->data.select.menu = NULL; free(menu); - return false; + return res; } menu->c = c; + } else { + menu = control->data.select.menu; } - else menu = control->data.select.menu; menu->callback(client_data, 0, 0, menu->width, menu->height); - return true; + return NSERROR_OK; } -- cgit v1.2.3