[PATCH 2/2] conhost: Popup Attributes should match Character Attributes when a new screen buffer is created
Jacek Caban
jacek at codeweavers.com
Mon Jul 26 05:02:52 CDT 2021
On 7/25/21 7:42 AM, Hugh McMaster wrote:
> Hi Jacek,
>
> On Fri, 23 Jul 2021 at 22:24, Jacek Caban wrote:
>> Hi Hugh,
>>
>> On 7/22/21 3:36 PM, Hugh McMaster wrote:
>>> @@ -104,6 +104,7 @@ static struct screen_buffer *create_screen_buffer( struct console *console, int
>>> screen_buffer->win.right = width - 1;
>>> screen_buffer->win.bottom = height - 1;
>>> screen_buffer->attr = FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED;
>>> + screen_buffer->popup_attr = screen_buffer->attr;
>>
>> This part doesn't seem right. For windowed consoles this part is
>> overwritten when we read the config, but it's not the case for pseudo
>> consoles (or when we use Unix console). This breaks the attached test.
>> diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
>> index 6ee00aa49a6..6e53355f6e5 100644
>> --- a/dlls/kernel32/tests/console.c
>> +++ b/dlls/kernel32/tests/console.c
>> @@ -4352,6 +4352,7 @@ static void test_AllocConsole(void)
>>
>> static void test_pseudo_console_child(HANDLE input, HANDLE output)
>> {
>> + CONSOLE_SCREEN_BUFFER_INFOEX sb_infoex;
>> CONSOLE_SCREEN_BUFFER_INFO sb_info;
>> CONSOLE_CURSOR_INFO cursor_info;
>> DWORD mode;
>> @@ -4402,6 +4403,13 @@ static void test_pseudo_console_child(HANDLE input, HANDLE output)
>> ok(sb_info.srWindow.Bottom == 29, "srWindow.Bottom = %u\n", sb_info.srWindow.Bottom);
>> ok(sb_info.dwMaximumWindowSize.X == 40, "dwMaximumWindowSize.X = %u\n", sb_info.dwMaximumWindowSize.X);
>> ok(sb_info.dwMaximumWindowSize.Y == 30, "dwMaximumWindowSize.Y = %u\n", sb_info.dwMaximumWindowSize.Y);
>> + ok(sb_info.wAttributes == 0x7, "wAttributes = %#x\n", sb_info.wAttributes);
>> +
>> + sb_infoex.cbSize = sizeof(sb_infoex);
>> + ret = GetConsoleScreenBufferInfoEx(output, &sb_infoex);
>> + ok(ret, "GetConsoleScreenBufferInfo failed: %u\n", GetLastError());
>> + ok(sb_infoex.wAttributes == 0x7, "wAttributes = %#x\n", sb_infoex.wAttributes);
>> + ok(sb_infoex.wPopupAttributes == 0xf5, "wPopupAttributes = %#x\n", sb_infoex.wPopupAttributes);
>>
>> ret = GetConsoleCursorInfo(output, &cursor_info);
>> ok(ret, "GetConsoleCursorInfo failed: %u\n", GetLastError());
> What is this testing? Currently, it just tells us what the color
> attributes and popup attributes are. There's nothing unexpected here.
>
> I ran a test using the --pseudo-console flag while creating a new
> screen buffer [1] and found the popup attributes take on the same
> value as the color attributes, in line with the other tests and patch.
>
> How should I be testing this?
>
Just run the test with no arguments, the test will create a pseudo
console launch a child process attached to the pseudo console. It's a
bit tricky, because you will not see printfs from failures on Wine, but
you will still see it failing or not. The test shows that a fresh new
pseudo console does not have default popup attributes equal to
attributes (like in your patch).
Thanks,
Jacek
More information about the wine-devel
mailing list