painting: evade an ncurses bug by adding the A_PROTECT attribute
Adding the obscure A_PROTECT attribute to every color prevents an occasional miscoloring of the first few rows on the screen -- when ncurses is version 6.0 and dates from before October 17, 2015. Original-idea-by: Brand Huntsman <alpha@qzx.com> Tested-by: Brand Huntsman <alpha@qzx.com> This fixes https://savannah.gnu.org/bugs/?52182.
Этот коммит содержится в:
родитель
ab14df074f
Коммит
e6a92b1406
15
src/color.c
15
src/color.c
@ -30,6 +30,15 @@
|
|||||||
|
|
||||||
#ifdef ENABLE_COLOR
|
#ifdef ENABLE_COLOR
|
||||||
|
|
||||||
|
/* For early versions of ncurses-6.0, use an additional A_PROTECT attribute
|
||||||
|
* for all colors, in order to work around an ncurses miscoloring bug. */
|
||||||
|
#if defined(NCURSES_VERSION_MAJOR) && (NCURSES_VERSION_MAJOR == 6) && \
|
||||||
|
(NCURSES_VERSION_MINOR == 0) && (NCURSES_VERSION_PATCH < 20151017)
|
||||||
|
#define A_BANDAID A_PROTECT
|
||||||
|
#else
|
||||||
|
#define A_BANDAID A_NORMAL
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Initialize the colors for nano's interface, and assign pair numbers
|
/* Initialize the colors for nano's interface, and assign pair numbers
|
||||||
* for the colors in each syntax. */
|
* for the colors in each syntax. */
|
||||||
void set_colorpairs(void)
|
void set_colorpairs(void)
|
||||||
@ -59,8 +68,8 @@ void set_colorpairs(void)
|
|||||||
if (background == -1 && !using_defaults)
|
if (background == -1 && !using_defaults)
|
||||||
background = COLOR_BLACK;
|
background = COLOR_BLACK;
|
||||||
init_pair(i + 1, foreground, background);
|
init_pair(i + 1, foreground, background);
|
||||||
interface_color_pair[i] =
|
interface_color_pair[i] = COLOR_PAIR(i + 1) | A_BANDAID |
|
||||||
COLOR_PAIR(i + 1) | (bright ? A_BOLD : A_NORMAL);
|
(bright ? A_BOLD : A_NORMAL);
|
||||||
} else {
|
} else {
|
||||||
if (i != FUNCTION_TAG)
|
if (i != FUNCTION_TAG)
|
||||||
interface_color_pair[i] = hilite_attribute;
|
interface_color_pair[i] = hilite_attribute;
|
||||||
@ -91,7 +100,7 @@ void set_colorpairs(void)
|
|||||||
else
|
else
|
||||||
ink->pairnum = new_number++;
|
ink->pairnum = new_number++;
|
||||||
|
|
||||||
ink->attributes = COLOR_PAIR(ink->pairnum) |
|
ink->attributes = COLOR_PAIR(ink->pairnum) | A_BANDAID |
|
||||||
(ink->bright ? A_BOLD : A_NORMAL);
|
(ink->bright ? A_BOLD : A_NORMAL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user