-$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.106 $ $NHDT-Date: 1567273590 2019/08/31 17:46:30 $
+$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.107 $ $NHDT-Date: 1567302620 2019/09/01 01:50:20 $
This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however,
to generate Right_click for systems with one-button mouse or trackpad;
the mouse data passed to nethack didn't match the curses (ncurses on
OSX 10.11) documentation and things didn't work as intended
+curses: menu coloring required that both 'menucolors' and 'guicolor' be On;
+ for menus, override guicolor with more-specific menucolors
curses+'perm_invent': entries were wrapping without any control; usually not
noticeable because next entry overwrote, but visible for final entry
when whole inventory fit within the available height; looked ok with
curses+'perm_invent': could crash during restore if game was saved while
hero was swallowed (invalid u.ustuck pointer; suppressing attempts to
update persistent inventory window during restore hides the problem)
-curses+'perm_invent': menu coloring required that both 'menucolors' and
- 'guicolor' be On; override guicolor with more-specific menucolors
curses+'popup_dialog': show the text cursor at the end of prompts for single
character input
curses+DUMPLOG: pass along old messages from save file and quest message
extern int curses_read_char(void);
extern void curses_toggle_color_attr(WINDOW *win, int color, int attr,
int onoff);
+extern void curses_menu_color_attr(WINDOW *, int, int, int);
extern void curses_bail(const char *mesg);
extern winid curses_get_wid(int type);
extern char *curses_copy_of(const char *s);
start_col += 2;
}
#endif
- if (iflags.use_menu_color
- && (menu_color = get_menu_coloring(menu_item_ptr->str,
- &color, &attr)) != 0) {
- if (color != NO_COLOR) {
- curses_toggle_color_attr(win, color, NONE, ON);
- }
+ color = NO_COLOR;
+ menu_color = iflags.use_menu_color
+ && get_menu_coloring(menu_item_ptr->str, &color, &attr);
+ if (menu_color) {
attr = curses_convert_attr(attr);
- if (attr != A_NORMAL) {
- menu_item_ptr->attr = menu_item_ptr->attr | attr;
- }
+ if (color != NO_COLOR || attr != A_NORMAL)
+ curses_menu_color_attr(win, color, attr, ON);
+ } else {
+ attr = menu_item_ptr->attr;
+ if (color != NO_COLOR || attr != A_NORMAL)
+ curses_toggle_color_attr(win, color, attr, ON);
}
- curses_toggle_color_attr(win, NONE, menu_item_ptr->attr, ON);
num_lines = curses_num_lines(menu_item_ptr->str, entry_cols);
-
for (count = 0; count < num_lines; count++) {
if (menu_item_ptr->str && *menu_item_ptr->str) {
tmpstr = curses_break_str(menu_item_ptr->str,
free(tmpstr);
}
}
- if (menu_color && (color != NO_COLOR)) {
- curses_toggle_color_attr(win, color, NONE, OFF);
+ if (color != NO_COLOR || attr != A_NORMAL) {
+ if (menu_color)
+ curses_menu_color_attr(win, color, attr, OFF);
+ else
+ curses_toggle_color_attr(win, color, attr, OFF);
}
- curses_toggle_color_attr(win, NONE, menu_item_ptr->attr, OFF);
+
menu_item_ptr = menu_item_ptr->next_item;
}
CHAR_P accelerator, attr_t attr, const char *str)
{
WINDOW *win = curses_get_nhwin(INV_WIN);
- boolean save_guicolor;
int color = NO_COLOR;
int x = 0, width, height, available_width, stroffset = 0,
border = curses_window_has_border(INV_WIN) ? 1 : 0;
}
if (color == NO_COLOR)
color = NONE;
- /* curses_toggle_color_attr() uses 'guicolor' to decide whether to
- honor specified color, but persistent inventory window has its own
- more-specific control, 'menucolors', so override with that here */
- save_guicolor = iflags.wc2_guicolor;
- iflags.wc2_guicolor = iflags.use_menu_color;
- curses_toggle_color_attr(win, color, attr, ON);
- /* wattron(win, attr); */
+ curses_menu_color_attr(win, color, attr, ON);
wprintw(win, "%.*s", available_width, str + stroffset);
- /* wattroff(win, attr); */
- curses_toggle_color_attr(win, color, attr, OFF);
- iflags.wc2_guicolor = save_guicolor;
+ curses_menu_color_attr(win, color, attr, OFF);
wclrtoeol(win);
}
#endif /* TEXTCOLOR */
}
+/* call curses_toggle_color_attr() with 'menucolors' instead of 'guicolor'
+ as the control flag */
+
+void
+curses_menu_color_attr(WINDOW *win, int color, int attr, int onoff)
+{
+ boolean save_guicolor = iflags.wc2_guicolor;
+
+ /* curses_toggle_color_attr() uses 'guicolor' to decide whether to
+ honor specified color, but menu windows have their own
+ more-specific control, 'menucolors', so override with that here */
+ iflags.wc2_guicolor = iflags.use_menu_color;
+ curses_toggle_color_attr(win, color, attr, onoff);
+ iflags.wc2_guicolor = save_guicolor;
+}
+
/* clean up and quit - taken from tty port */
/* Global declarations */
int curses_read_char(void);
-void curses_toggle_color_attr(WINDOW * win, int color, int attr, int onoff);
+void curses_toggle_color_attr(WINDOW *win, int color, int attr, int onoff);
+void curses_menu_color_attr(WINDOW *win, int color, int attr, int onoff);
void curses_bail(const char *mesg);
winid curses_get_wid(int type);
char *curses_copy_of(const char *s);