From: Connor McAdams cmcadams@codeweavers.com
Signed-off-by: Connor McAdams cmcadams@codeweavers.com --- dlls/user32/class.c | 12 ++++++++++-- dlls/user32/tests/class.c | 23 ++++++++++++----------- 2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/dlls/user32/class.c b/dlls/user32/class.c index 0cfdf552a5d..e2322ea2fc0 100644 --- a/dlls/user32/class.c +++ b/dlls/user32/class.c @@ -498,7 +498,14 @@ INT WINAPI GetClassNameW( HWND hwnd, LPWSTR buffer, INT count ) */ UINT WINAPI RealGetWindowClassA( HWND hwnd, LPSTR buffer, UINT count ) { - return GetClassNameA( hwnd, buffer, count ); + WCHAR tmpbuf[MAX_ATOM_LEN + 1]; + DWORD len; + + if (count <= 0) return 0; + if (!RealGetWindowClassW( hwnd, tmpbuf, ARRAY_SIZE( tmpbuf ))) return 0; + RtlUnicodeToMultiByteN( buffer, count - 1, &len, tmpbuf, lstrlenW(tmpbuf) * sizeof(WCHAR) ); + buffer[len] = 0; + return len; }
@@ -507,7 +514,8 @@ UINT WINAPI RealGetWindowClassA( HWND hwnd, LPSTR buffer, UINT count ) */ UINT WINAPI RealGetWindowClassW( HWND hwnd, LPWSTR buffer, UINT count ) { - return GetClassNameW( hwnd, buffer, count ); + UNICODE_STRING name = { .Buffer = buffer, .MaximumLength = count * sizeof(WCHAR) }; + return NtUserGetClassName( hwnd, TRUE, &name ); }
diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c index 57e2dd19e3f..1d8d5ee06d6 100644 --- a/dlls/user32/tests/class.c +++ b/dlls/user32/tests/class.c @@ -1604,16 +1604,16 @@ struct real_class_test { };
static const struct real_class_test class_tests[] = { - { L"Button", "Button", L"Button", "Button", TRUE, TRUE }, - { L"ComboBox", "ComboBox", L"ComboBox", "ComboBox", TRUE, TRUE }, - { L"Edit", "Edit", L"Edit", "Edit", TRUE, TRUE }, - { L"ListBox", "ListBox", L"ListBox", "ListBox", TRUE, TRUE }, - { L"ScrollBar", "ScrollBar", L"ScrollBar", "ScrollBar", TRUE, TRUE }, - { L"Static", "Static", L"Static", "Static", TRUE, TRUE }, - { L"ComboLBox", "ComboLBox", L"ListBox", "ListBox", TRUE, TRUE }, - { L"MDIClient", "MDIClient", L"MDIClient", "MDIClient", TRUE, TRUE }, - { L"#32768", "#32768", L"#32768", "#32768", TRUE, TRUE }, - { L"#32770", "#32770", L"#32770", "#32770", TRUE, TRUE }, + { L"Button", "Button", L"Button", "Button", TRUE, FALSE }, + { L"ComboBox", "ComboBox", L"ComboBox", "ComboBox", TRUE, FALSE }, + { L"Edit", "Edit", L"Edit", "Edit", TRUE, FALSE }, + { L"ListBox", "ListBox", L"ListBox", "ListBox", TRUE, FALSE }, + { L"ScrollBar", "ScrollBar", L"ScrollBar", "ScrollBar", TRUE, FALSE }, + { L"Static", "Static", L"Static", "Static", TRUE, FALSE }, + { L"ComboLBox", "ComboLBox", L"ListBox", "ListBox", TRUE, FALSE }, + { L"MDIClient", "MDIClient", L"MDIClient", "MDIClient", TRUE, FALSE }, + { L"#32768", "#32768", L"#32768", "#32768", TRUE, FALSE }, + { L"#32770", "#32770", L"#32770", "#32770", TRUE, FALSE }, /* Not all built-in classes set real window class. */ { L"Message", "Message", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, FALSE, FALSE }, }; @@ -1623,7 +1623,8 @@ static const struct real_class_test comctl32_class_tests[] = { { L"ComboBox", "ComboBox", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, }, { L"Edit", "Edit", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, }, { L"ListBox", "ListBox", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, }, - { L"ScrollBar", "ScrollBar", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, }, + /* We don't have a comctl32 scroll control in Wine. */ + { L"ScrollBar", "ScrollBar", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, FALSE, TRUE }, { L"Static", "Static", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, }, { L"ComboLBox", "ComboLBox", SUPER_CLASS_NAME_W, SUPER_CLASS_NAME_A, }, };