[PATCH 2/2] conhost: Popup Attributes should match Character Attributes when a new screen buffer is created

Hugh McMaster hugh.mcmaster at outlook.com
Thu Jul 22 08:36:20 CDT 2021


MSDN says the Popup Attributes (colors) are copied to the new screen buffer
when CreateConsoleScreenBuffer() is called. Testing shows the new Popup
Attributes are actually the existing Character Attributes.

Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 dlls/kernel32/tests/console.c | 12 ++++++------
 programs/conhost/conhost.c    |  3 ++-
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/dlls/kernel32/tests/console.c b/dlls/kernel32/tests/console.c
index 5f9342ffd44..6ee00aa49a6 100644
--- a/dlls/kernel32/tests/console.c
+++ b/dlls/kernel32/tests/console.c
@@ -1049,8 +1049,8 @@ static void test_new_screen_buffer_color_attributes(HANDLE hConOut)
 
     ok(csbi2.wAttributes == orig_attr, "Character Attributes should have been copied: "
        "got %#x, expected %#x\n", csbi2.wAttributes, orig_attr);
-    todo_wine ok(csbi2.wPopupAttributes != orig_popup, "Popup Attributes should not match original value\n");
-    todo_wine ok(csbi2.wPopupAttributes == orig_attr, "Popup Attributes should match Character Attributes\n");
+    ok(csbi2.wPopupAttributes != orig_popup, "Popup Attributes should not match original value\n");
+    ok(csbi2.wPopupAttributes == orig_attr, "Popup Attributes should match Character Attributes\n");
 
     /* Test different Character Attributes */
     attr = FOREGROUND_BLUE|BACKGROUND_GREEN;
@@ -1070,8 +1070,8 @@ static void test_new_screen_buffer_color_attributes(HANDLE hConOut)
 
     ok(csbi2.wAttributes == attr, "Character Attributes should have been copied: "
        "got %#x, expected %#x\n", csbi2.wAttributes, attr);
-    todo_wine ok(csbi2.wPopupAttributes != orig_popup, "Popup Attributes should not match original value\n");
-    todo_wine ok(csbi2.wPopupAttributes == attr, "Popup Attributes should match Character Attributes\n");
+    ok(csbi2.wPopupAttributes != orig_popup, "Popup Attributes should not match original value\n");
+    ok(csbi2.wPopupAttributes == attr, "Popup Attributes should match Character Attributes\n");
 
     ret = SetConsoleTextAttribute(hConOut, orig_attr);
     ok(ret, "SetConsoleTextAttribute failed: error %u\n", GetLastError());
@@ -1094,8 +1094,8 @@ static void test_new_screen_buffer_color_attributes(HANDLE hConOut)
 
     ok(csbi2.wAttributes == orig_attr, "Character Attributes should have been copied: "
        "got %#x, expected %#x\n", csbi2.wAttributes, orig_attr);
-    todo_wine ok(csbi2.wPopupAttributes != orig_popup, "Popup Attributes should not match original value\n");
-    todo_wine ok(csbi2.wPopupAttributes == orig_attr, "Popup Attributes should match Character Attributes\n");
+    ok(csbi2.wPopupAttributes != orig_popup, "Popup Attributes should not match original value\n");
+    ok(csbi2.wPopupAttributes == orig_attr, "Popup Attributes should match Character Attributes\n");
 
     csbi.wPopupAttributes = orig_popup;
     ret = SetConsoleScreenBufferInfoEx(hConOut, &csbi);
diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c
index 805df880897..93944d02e9c 100644
--- a/programs/conhost/conhost.c
+++ b/programs/conhost/conhost.c
@@ -85,7 +85,6 @@ static struct screen_buffer *create_screen_buffer( struct console *console, int
     screen_buffer->cursor_visible = 1;
     screen_buffer->width          = width;
     screen_buffer->height         = height;
-    screen_buffer->popup_attr     = 0xf5;
     screen_buffer->font.weight    = FW_NORMAL;
     screen_buffer->font.pitch_family = FIXED_PITCH | FF_DONTCARE;
 
@@ -96,6 +95,7 @@ static struct screen_buffer *create_screen_buffer( struct console *console, int
         screen_buffer->win.right  = console->active->win.right  - console->active->win.left;
         screen_buffer->win.bottom = console->active->win.bottom - console->active->win.top;
         screen_buffer->attr       = console->active->attr;
+        screen_buffer->popup_attr = console->active->attr;
     }
     else
     {
@@ -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;
     }
 
     if (wine_rb_put( &screen_buffer_map, LongToPtr(id), &screen_buffer->entry ))
-- 
2.32.0




More information about the wine-devel mailing list