diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2012-12-30 04:22:34 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2012-12-30 04:22:34 +0000 |
commit | 52bf5abd924bc78494905f16ffbd4bd67062240c (patch) | |
tree | 6d48accafd38ffd900622df8c9eab499d302c36f /contrib/dialog/menubox.c | |
parent | 7e3a527820c0248a0703bbf8809aabef78a41db6 (diff) | |
download | FreeBSD-src-52bf5abd924bc78494905f16ffbd4bd67062240c.zip FreeBSD-src-52bf5abd924bc78494905f16ffbd4bd67062240c.tar.gz |
Revert r241818 that updated dialog to 20120706. This turns out to horribly
break mixed form dialogs in conjunction with the FreeBSD termcap, making
the bsdinstall partition editor Add dialog, among other things, completely
nonfunctional. This restores dialog 20110707.
Diffstat (limited to 'contrib/dialog/menubox.c')
-rw-r--r-- | contrib/dialog/menubox.c | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/contrib/dialog/menubox.c b/contrib/dialog/menubox.c index 58a714b..25005a4 100644 --- a/contrib/dialog/menubox.c +++ b/contrib/dialog/menubox.c @@ -1,9 +1,9 @@ /* - * $Id: menubox.c,v 1.132 2012/07/01 16:30:04 Zoltan.Kelemen Exp $ + * $Id: menubox.c,v 1.122 2011/06/29 09:48:46 tom Exp $ * * menubox.c -- implements the menu box * - * Copyright 2000-2011,2012 Thomas E. Dickey + * Copyright 2000-2010,2011 Thomas E. Dickey * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public Licens, version 2.1e @@ -66,7 +66,7 @@ print_arrows(WINDOW *win, box_x + menu_width, box_y, box_y + menu_height + 1, - menubox_border2_attr, + menubox_attr, menubox_border_attr); } @@ -83,11 +83,14 @@ print_tag(WINDOW *win, int my_x = item_x; int my_y = ItemToRow(choice); int tag_width = (my_x - tag_x - GUTTER); + const int *cols; const int *indx; int limit; int prefix; + cols = dlg_index_columns(item->name); indx = dlg_index_wchars(item->name); + limit = dlg_count_wchars(item->name); prefix = (indx[1] - indx[0]); /* highlight first char of the tag to be special */ @@ -249,7 +252,7 @@ handle_button(int code, DIALOG_LISTITEM * items, int choice) return code; } -int +static int dlg_renamed_menutext(DIALOG_LISTITEM * items, int current, char *newtext) { if (dialog_vars.input_result) @@ -261,7 +264,7 @@ dlg_renamed_menutext(DIALOG_LISTITEM * items, int current, char *newtext) return DLG_EXIT_EXTRA; } -int +static int dlg_dummy_menutext(DIALOG_LISTITEM * items, int current, char *newtext) { (void) items; @@ -322,18 +325,17 @@ dlg_menu(const char *title, #endif int i, j, x, y, cur_x, cur_y, box_x, box_y; int key = 0, fkey; - int button = dialog_state.visit_items ? -1 : dlg_default_button(); + int button = dialog_state.visit_items ? -1 : dlg_defaultno_button(); int choice = dlg_default_listitem(items); int result = DLG_EXIT_UNKNOWN; int scrollamt = 0; - int max_choice; + int max_choice, min_width; int found; int use_height, use_width, name_width, text_width; WINDOW *dialog, *menu; char *prompt = dlg_strclone(cprompt); const char **buttons = dlg_ok_labels(); - bool is_inputmenu = ((rename_menutext != 0) - && (rename_menutext != dlg_dummy_menutext)); + bool is_inputmenu = (rename_menutext == dlg_renamed_menutext); dlg_does_output(); dlg_tab_correct_str(prompt); @@ -343,14 +345,13 @@ dlg_menu(const char *title, #endif use_height = menu_height; - use_width = dlg_calc_list_width(item_no, items) + 10; - use_width = MAX(26, use_width); if (use_height == 0) { + min_width = dlg_calc_list_width(item_no, items) + 10; /* calculate height without items (4) */ - dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, use_width); + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH, MAX(26, min_width)); dlg_calc_listh(&height, &use_height, item_no); } else { - dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, use_width); + dlg_auto_size(title, prompt, &height, &width, MIN_HIGH + use_height, 26); } dlg_button_layout(buttons, &width); dlg_print_size(height, width); @@ -365,8 +366,8 @@ dlg_menu(const char *title, dlg_mouse_setbase(x, y); - dlg_draw_box2(dialog, 0, 0, height, width, dialog_attr, border_attr, border2_attr); - dlg_draw_bottom_box2(dialog, border_attr, border2_attr, dialog_attr); + dlg_draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr); + dlg_draw_bottom_box(dialog); dlg_draw_title(dialog, title); wattrset(dialog, dialog_attr); @@ -401,7 +402,7 @@ dlg_menu(const char *title, /* draw a box around the menu items */ dlg_draw_box(dialog, box_y, box_x, use_height + 2, menu_width + 2, - menubox_border_attr, menubox_border2_attr); + menubox_border_attr, menubox_attr); name_width = 0; text_width = 0; @@ -460,7 +461,6 @@ dlg_menu(const char *title, dlg_draw_buttons(dialog, height - 2, 0, buttons, button, FALSE, width); - dlg_trace_win(dialog); while (result == DLG_EXIT_UNKNOWN) { if (button < 0) /* --visit-items */ wmove(dialog, box_y + ItemToRow(choice) + 1, box_x + tag_x + 1); @@ -687,14 +687,17 @@ dlg_menu(const char *title, FALSE, width); break; case DLGK_ENTER: - if (is_inputmenu) - result = dlg_ok_buttoncode(button); - else - result = dlg_enter_buttoncode(button); + result = dlg_enter_buttoncode(button); /* * If dlg_menu() is called from dialog_menu(), we want to - * capture the results into dialog_vars.input_result. + * capture the results into dialog_vars.input_result, but not + * if dlg_menu() is called directly from an application. We + * can check this by testing if rename_menutext is the function + * pointer owned by dialog_menu(). It would be nicer to have + * this logic inside dialog_menu(), but that cannot be done + * since we would lose compatibility for the results reported + * after input_menu_edit(). */ if (result == DLG_EXIT_ERROR) { result = DLG_EXIT_UNKNOWN; @@ -809,9 +812,7 @@ dialog_menu(const char *title, item_no, listitems, &choice, - (dialog_vars.input_menu - ? dlg_renamed_menutext - : dlg_dummy_menutext)); + dialog_vars.input_menu ? dlg_renamed_menutext : dlg_dummy_menutext); dlg_free_columns(&listitems[0].text, sizeof(DIALOG_LISTITEM), item_no); free(listitems); |