Nikolay Sivov : comctl32/button: Improve button data layout compatibility.
Alexandre Julliard
julliard at winehq.org
Fri Mar 30 12:32:36 CDT 2018
Module: wine
Branch: master
Commit: 733a3ec1b9d5a62ba47b289bd23e166ce55dcdf0
URL: https://source.winehq.org/git/wine.git/?a=commit;h=733a3ec1b9d5a62ba47b289bd23e166ce55dcdf0
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Fri Mar 30 13:20:46 2018 +0300
comctl32/button: Improve button data layout compatibility.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/comctl32/button.c | 2 ++
dlls/comctl32/tests/button.c | 57 ++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c
index 8b5a654..7d48fe7 100644
--- a/dlls/comctl32/button.c
+++ b/dlls/comctl32/button.c
@@ -90,6 +90,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(button);
typedef struct _BUTTON_INFO
{
HWND hwnd;
+ HWND parent;
LONG state;
HFONT font;
WCHAR *note;
@@ -342,6 +343,7 @@ static LRESULT CALLBACK BUTTON_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, L
infoPtr = heap_alloc_zero( sizeof(*infoPtr) );
SetWindowLongPtrW( hWnd, 0, (LONG_PTR)infoPtr );
infoPtr->hwnd = hWnd;
+ infoPtr->parent = GetParent(hWnd);
return DefWindowProcW(hWnd, uMsg, wParam, lParam);
case WM_NCDESTROY:
diff --git a/dlls/comctl32/tests/button.c b/dlls/comctl32/tests/button.c
index 4c07f0a..0aacfa5 100644
--- a/dlls/comctl32/tests/button.c
+++ b/dlls/comctl32/tests/button.c
@@ -979,6 +979,62 @@ static void register_parent_class(void)
RegisterClassA(&cls);
}
+static void test_button_data(void)
+{
+ static const DWORD styles[] =
+ {
+ BS_PUSHBUTTON,
+ BS_DEFPUSHBUTTON,
+ BS_CHECKBOX,
+ BS_AUTOCHECKBOX,
+ BS_RADIOBUTTON,
+ BS_3STATE,
+ BS_AUTO3STATE,
+ BS_GROUPBOX,
+ BS_USERBUTTON,
+ BS_AUTORADIOBUTTON,
+ BS_OWNERDRAW,
+ BS_SPLITBUTTON,
+ BS_DEFSPLITBUTTON,
+ BS_COMMANDLINK,
+ BS_DEFCOMMANDLINK,
+ };
+
+ struct button_desc
+ {
+ HWND self;
+ HWND parent;
+ };
+ unsigned int i;
+ HWND parent;
+
+ parent = CreateWindowExA(0, "TestParentClass", "Test parent", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
+ 100, 100, 200, 200, 0, 0, 0, NULL);
+ ok(parent != 0, "Failed to create parent window\n");
+
+ for (i = 0; i < ARRAY_SIZE(styles); i++)
+ {
+ struct button_desc *desc;
+ HWND hwnd;
+
+ hwnd = create_button(styles[i], parent);
+ ok(hwnd != NULL, "Failed to create a button.\n");
+
+ desc = (void *)GetWindowLongPtrA(hwnd, 0);
+ ok(desc != NULL, "Expected window data.\n");
+
+ if (desc)
+ {
+ ok(desc->self == hwnd, "Unexpected 'self' field.\n");
+ ok(desc->parent == parent, "Unexpected 'parent' field.\n");
+ }
+
+ DestroyWindow(hwnd);
+ }
+
+ DestroyWindow(parent);
+}
+
START_TEST(button)
{
ULONG_PTR ctx_cookie;
@@ -995,6 +1051,7 @@ START_TEST(button)
test_button_class();
test_button_messages();
test_note();
+ test_button_data();
unload_v6_module(ctx_cookie, hCtx);
}
More information about the wine-cvs
mailing list